如何解决比较 2 个文件的文本和比较的问题
How to fix issues with comparing text of 2 files and comparing
我有一个脚本可以从设备管理器 "Master-EDR-List.txt" 获取分配开关列表。然后它从不同的服务器 "New-EDR-List.txt" 抓取另一个 txt 文件。主列表非常静态,直到新列表具有主列表缺失的其他 EDR。
我想比较这 2 个文件并保存在新列表中但不在主列表中的任何 EDR。我确实写了一个比较脚本,但它不可靠。我在新列表中添加了一些额外的测试 EDR,根据我将它们放置在列表中的位置,我得到了意想不到的结果。我总是得到新的,但有时我也会得到一个在两个列表中的 EDR,有时我会在同一行中得到两个新的 EDR,没有空格。
这是我的代码:
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)
这是我用于测试的列表:
主列表:
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
我在列表中添加了 2 个测试 rt511-sps5、6 和 7,而不是只得到这 3 个项目,我在我的 Diff 文件中得到这个:
差异文件:
rt511-sps7.rt.tst.comrt511-sps5.rt.tst.com
rt511-sps6.rt.tst.com
rts12b-ax46edr1.rt.tst.com
如您所见,sps7 和 5 出于某种原因在同一行并且 "rts12b-ax46edr1" 不应该存在,因为它已经存在于两个文件中。
有谁知道为什么会这样,我该如何解决? New List 可以发现任何新的配电开关,并根据其名称将其放在列表中的任何位置。我希望这个脚本只打印出 Master 没有的列表中的任何新 EDR。
谢谢
我修改了你的脚本。请使用以下代码来满足您的要求。不要忘记关闭所有打开的文件。
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)
我有一个脚本可以从设备管理器 "Master-EDR-List.txt" 获取分配开关列表。然后它从不同的服务器 "New-EDR-List.txt" 抓取另一个 txt 文件。主列表非常静态,直到新列表具有主列表缺失的其他 EDR。
我想比较这 2 个文件并保存在新列表中但不在主列表中的任何 EDR。我确实写了一个比较脚本,但它不可靠。我在新列表中添加了一些额外的测试 EDR,根据我将它们放置在列表中的位置,我得到了意想不到的结果。我总是得到新的,但有时我也会得到一个在两个列表中的 EDR,有时我会在同一行中得到两个新的 EDR,没有空格。
这是我的代码:
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)
这是我用于测试的列表:
主列表:
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
我在列表中添加了 2 个测试 rt511-sps5、6 和 7,而不是只得到这 3 个项目,我在我的 Diff 文件中得到这个:
差异文件:
rt511-sps7.rt.tst.comrt511-sps5.rt.tst.com
rt511-sps6.rt.tst.com
rts12b-ax46edr1.rt.tst.com
如您所见,sps7 和 5 出于某种原因在同一行并且 "rts12b-ax46edr1" 不应该存在,因为它已经存在于两个文件中。
有谁知道为什么会这样,我该如何解决? New List 可以发现任何新的配电开关,并根据其名称将其放在列表中的任何位置。我希望这个脚本只打印出 Master 没有的列表中的任何新 EDR。
谢谢
我修改了你的脚本。请使用以下代码来满足您的要求。不要忘记关闭所有打开的文件。
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)