我在尝试重复删除两个文本文件时遇到问题。 这应该是一项相当容易的任务,但情况如下:
我有两个用相同的python脚本创建的文本文件。 每个文件包含X行具有相同格式的行,类似于:
Keys added,HKLM\SOFTWARE\Wow6432Node\Microsoft\Tracing\notepad++_RASAPI32
Keys added,HKLM\SOFTWARE\Wow6432Node\Microsoft\Tracing\notepad++_RASMANCS
Keys added,HKLM\SYSTEM\ControlSet001\Control\Class\{3A1380F4-708F-49DE-B2EF-04D25EB009D5}
Keys added,HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_PROCMON23
Keys added,HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_PROCMON23\0000
Keys added,HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_PROCMON23\0000\Control
Keys added,HKLM\SYSTEM\ControlSet001\services\PROCMON23
我知道文本文件A与文件B具有一些完全相同的行,但它也有唯一的行。文件B也有唯一的行(显然文件A中有一些完全相同的行)。
我希望我的脚本输出3个文本文件,一个用于文件A中的唯一行,一个用于文件B中的唯一行,另一个用于包含重复行。
我的脚本因此似乎做了我想要它的一半,它拾取了两个文件中存在的一些行并将它们放在一个文本文件中,但它不适用于其他一些,我觉得很奇怪正在处理的文件的格式完全相同(因为我使用另一个Python脚本来创建它们)
例如,行Keys added,HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_PROCMON23
存在于两个文件中,但未被识别。
然而,行Keys added,HKLM\SOFTWARE\Wow6432Node\Microsoft\Tracing\notepad++_RASAPI32
也存在于两个文件中,但它已被识别。
我的脚本现在看起来像这样:
import sys
input_1 = open(sys.argv[1]).read().splitlines()
input_2 = open(sys.argv[2]).read().splitlines()
print 'First argument is biggest log'
dupes = open('overeenkomsten.txt', 'a')
onlyTen = open('onlyTen.txt', 'a')
onlySeven = open('onlySeven.txt', 'a')
for line in input_1:
#print line
if line in input_2:
#print 'check'
dupes.write(line+'\n')
else:
#print 'check 2'
onlyTen.write(line+'\n')
for line in input_2:
if line not in input_1:
#print 'check 3'
onlySeven.write(line+'\n')
else:
continue
dupes.close()
onlyTen.close()
onlySeven.close()
回答时请记住,我想遍历两个文件中的所有行。因此,如果我将其中一个文件作为input_1,我仍然需要通过input_2运行for循环,因为我想知道input_2中哪些行不在input_1中。
提前致谢
答案 0 :(得分:1)
这看起来非常像设置逻辑。 如果订单不重要,那么这是一种方法:
s1 = set( input_1 )
s2 = set( input_2 )
lines_in_both_files = s1.intersection(s2)
lines_in_either = s1.union(s2)
# lines in input_1 not in input_2
l1_n2 = s1 - s2
# lines in input_2 not in input_1
l2_n1 = s2 - s1
如果订单很重要,请执行以上操作,然后在写入之前使用“myset中的line”进行检查。