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

比较python中的两个文件,每个文件都有重复的数据,python,compare,file-handling,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~file

我尝试比较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
正如你所看到的,在新文件中,我有两行新的文本警告1~file1警告3~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中是否可用。如果没有,则写入新文件。 此方法仅获取警告3,而不是新的警告1

我需要的东西是每行只比较一次。。。剩下的行将写入新文件


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

我会使用
计数器
查找发生次数的差异,例如:

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)

你想检查这些文件是否相等,或者你也想要差异吗?我只想要新文件中出现的所有新文本行。我已经删除了我的答案,因为它对你没有多大帮助。@AshwiniChaudhary其他人可能喜欢你的答案,不管怎样,这取决于你。这正是我想要的。虽然一开始我很困惑计数器在做什么,但在阅读了它的教程之后,我现在对它的工作非常清楚。谢谢只是另一个查询,我可以得到通过此操作从文件中提取的行的行号吗?恐怕不行,请记住计数器是dict的子类,因此也是未排序的。嗯,这会有点麻烦,无论如何,谢谢您的帮助。:)还有一件事,在Python3中,iteritems不起作用,所以我用items来代替它。我仍然被困在2.7的土地上,所以总是忘了提它:)