2017-10-09 14 views
0

デバイスマネージャ "Master-EDR-List.txt"から配信スイッチのリストを取得するスクリプトがあります。その後、別のサーバー "New-EDR-List.txt"から別のtxtファイルを取得します。新しいリストにマスターリストがない追加のEDRがあるまで、マスターリストはかなり静的です。2ファイルの比較テキストと比較の問題を解決する方法

私はこれらの2つのファイルを比較し、新しいリストにあり、マスターリストにないEDRを保存したいと思います。私は比較スクリプトを書いたが、それは信頼できない。私は新しいリストにいくつかの追加のテストEDRを追加しました。リストに置いた場所に基づいて予期せぬ結果を得ています。私はいつも新しいものを手に入れることができますが、両方のリストにあるEDRを取得することもあります。また、新しいEDRを両方とも同じ行にスペースを入れずに取得することもあります。ここで

は私のコードです:

マスターリスト:

rts41d-an28edr1.rt.tst.com 
rts41d-an28edr2.rt.tst.com 
rts41d-an32edr1.rt.tst.com 
rts41d-an32edr2.rt.tst.com 
rts41d-as19edr1.rt.tst.com 
rts41d-as19edr2.rt.tst.com 
rts41d-as21edr1.rt.tst.com 
rts41d-as21edr2.rt.tst.com 
rts12a-ah46edr2.rt.tst.com 
rts12a-al46edr2.rt.tst.com 
rts12a-as46edr1.rt.tst.com 
rts12a-as46edr2.rt.tst.com 
rts12a-as46edr2.rt.tst.com 
rts12a-aw46edr1.rt.tst.com 
rts12a-aw46edr2.rt.tst.com 
rts12a-aw46edr2.rt.tst.com 
rts12b-as46edr1.rt.tst.com 
rts12b-ax46edr1.rt.tst.com 

新規一覧:

rts41d-an28edr1.rt.tst.com 
rts41d-an28edr2.rt.tst.com 
rts41d-an32edr1.rt.tst.com 
rts41d-an32edr2.rt.tst.com 
rts41d-as19edr1.rt.tst.com 
rts41d-as19edr2.rt.tst.com 
rt511-sps5.rt.tst.com 
rts41d-as21edr1.rt.tst.com 
rts41d-as21edr2.rt.tst.com 
rts12a-ah46edr2.rt.tst.com 
rts12a-al46edr2.rt.tst.com 
rts12a-as46edr1.rt.tst.com 
rts12a-as46edr2.rt.tst.com 
rt511-sps6.rt.tst.com 
rts12a-as46edr2.rt.tst.com 
rts12a-aw46edr1.rt.tst.com 
rts12a-aw46edr2.rt.tst.com 
rts12a-aw46edr2.rt.tst.com 
rts12b-as46edr1.rt.tst.com 
rts12b-ax46edr1.rt.tst.com 
rt511-sps7.rt.tst.com 

ここ

old_lines = set((line.strip() for line in open('Master-EDR-List.txt', 'r+'))) 
    file_new = open('New-EDR-List.txt', 'r+') 
    #file_diff = open('file_diff.txt', 'w') 

    #Open Master File 
    with open('Master-EDR-List.txt', 'r') as f: 
     d = set(f.readlines()) 

    #Open New File 
    with open('New-EDR-List.txt', 'r') as f: 
     e = set(f.readlines()) 

    #Open Diff files to store differences 
    open('file_diff.txt','w').close() 

    with open('file_diff.txt', 'a') as f: 
     for line in list(e - d): 
      f.write(line) 

は、私がテスト用に使用しています私のリストです私は2つのテストrt511を追加しました

差分ファイル:

rt511-sps7.rt.tst.comrt511-sps5.rt.tst.com 
rt511-sps6.rt.tst.com 
rts12b-ax46edr1.rt.tst.com 

あなたが見ることができるように、SPS7と5されている-sps5、6、リスト7とだけではなく、これらの3項目を取得し、私は私の差分ファイルでこれを取得しています何らかの理由で同じ行にあり、 "rts12b-ax46edr1"はすでに両方のファイルに存在しているので、そこにはいけません。

これがなぜ起こっているのか、どのように修正できるのか誰にも分かりますか?新しいリストは、新しい配布スイッチを発見し、その名前に応じてリストのどこにでも置くことができます。このスクリプトでは、マスターにはない新しいEDRがリストに表示されるようにしたいと思います。

ありがとうございました

答えて

0

スクリプトを変更しました。要件を満たすには、以下のコードを使用してください。すべての開いているファイルを閉じることを忘れないでください。

with open('Master-EDR-List.txt', 'r') as f: 
d = f.readlines() 
#Open New File 
with open('New-EDR-List.txt', 'r') as f: 
e = f.readlines() 
out = open('file_diff.txt', 'a') 

for newline in e: 
found = False 
for oldline in d: 
    if((newline.strip(' \t\n\r')) == (oldline.strip(' \t\n\r'))): 
    found = True 
    break; 
if(found == False): 
    if(newline != '\n'): 
    out.writelines(newline) 
+0

最初の行を修正して別のファイルに追加しましたが、まだ同じ出力が表示されています。 rts12b-ax46edr1.rt.tst.comは、両方のファイルに存在していてもまだリストにあります。私はなぜこれを行うのか分からない。 – Neo

+0

私はこの問題を発見したと思う。私はループをデバッグし、最後のものに達するまですべての繰り返しを行った。それは何をしているのですか? NewLine = 'rts12b-ax46edr1.rt.tst.com \ n "old_line =" rts12b-ax46edr1.rt.tst.com "マスターファイルでは最後の項目なので、" \ n "は最後に "\ n"を削除して、代わりに名前を使用することができますか? – Neo

+0

@Neoあなたの要件に応じて動作するはずのコードを変更しました。 。 –

関連する問題