比较python中的两个文件,每个文件都有重复的数据

时间:2013-06-20 09:24:26

标签: python compare file-handling

我正在尝试比较python中的两个文件,它实际上是在将它与旧警告文件进行比较后尝试查找新警告。

旧文件的内容是这样的:

warning1~file1
warning1~file1
warning2~file2
warning2~file2
warning2~file2

和新文件的内容是这样的

warning1~file1
warning1~file1
warning1~file1
warning3~file3
warning2~file2
warning2~file2
warning2~file2

正如你所看到的,在新文件中我有2个新的文本行warning1~file1 warning3~file3,我搜索了通过互联网比较两个文件,但他们认为每个文本行都不同。

small_file = open('file1','r')
long_file = open('file2','r')
output_file = open('newfile','w')

try:
    small_lines = small_file.readlines()
    small_lines_cleaned = [line.rstrip().lower() for line in small_lines]
    long_lines = long_file.readlines()
    long_lines_cleaned = [line.rstrip().lower() for line in long_lines]

    #for line in long_lines_cleaned:
    for line in long_lines_cleaned:
        if line not in small_lines_cleaned:
            output_file.writelines(line)

我尝试了这个我在这里找到的代码,但在运行之后,意识到它也只是检查file1中的一行是否在file2中可用。如果没有,则写入新文件。 此方法仅获取warning3,而不是新的warning1。

我需要一些东西,每行只比较一次......并且左边的行被写入新文件。

我希望我已正确解释了这个问题。

1 个答案:

答案 0 :(得分:2)

我会使用Counter来查找出现次数的差异,ep>

from collections import Counter

with open('file1', 'r') as f1, open('file2', 'r') as f2, open('newfile', 'w') as output:
    f1_lines = [line.rstrip().lower() for line in f1.readlines()]
    f2_lines = [line.rstrip().lower() for line in f2.readlines()]
    diff = Counter(f2_lines) - Counter(f1_lines)
    for msg, n in diff.iteritems():
        output.writelines((msg + '\n') * n)