我在尝试删除两个文本文件时遇到问题。
这应该是一个相当容易的任务,但是情况如下:
我有两个使用相同的python脚本创建的文本文件。
每个文件包含X行格式相同的行,类似于:Keys added,HKLM\SOFTWARE\Wow6432Node\Microsoft\Tracing\notepad++_RASAPI32Keys added,HKLM\SOFTWARE\Wow6432Node\Microsoft\Tracing\notepad++_RASMANCSKeys added,HKLM\SYSTEM\ControlSet001\Control\Class\{3A1380F4-708F-49DE-B2EF-04D25EB009D5}Keys added,HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_PROCMON23Keys added,HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_PROCMON23\0000Keys added,HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_PROCMON23\0000\ControlKeys 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()
在回答时,请记住,我想遍历两个文件中的所有行。因此,如果我将其中一个文件作为输入_1,则仍需要通过输入_2运行for循环,因为我想知道输入_2中的哪些行不在输入_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中的行”进行检查。
关于python - Python:两种方式进行重复数据删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36352392/