如何快速比较两个文件(~50MB)?

时间:2016-03-15 05:57:56

标签: python difflib

我正在使用Python并希望比较两个文件并找到每个文件都有的唯一行。我按照下面的说明进行操作,但速度太慢了。

f1 = open(file1)
text1Lines = f1.readlines()
f2 = open(file2)
text2Lines = f2.readlines()
diffInstance=difflib.Differ()
diffList = list(diffInstance.compare(text1Lines, text2Lines))

如何加快速度?

2 个答案:

答案 0 :(得分:0)

您可以同时读取和比较文件,而不是将它们存储在内存中。下面的代码片段做了很多不切实际的假设(文件长度相同,并且同一文件中没有两行存在),但它说明了这个想法:

unique_1 = []
unique_2 = []
for line_1 in handle_1:
    #  Reading line from the 1st file and checking if we have already seen them in in the 2nd
    if line_1 in unique_2:
        unique_2.remove(line)
    #  If line was unique, remember it
    else:
        unique_1.append(line)
    #  The same, only files are the other way
    line_2 = handle_2.readline()
    if line_2 in unique_1:
        unique_1.remove(line)
    else:
        unique_2.append(line)

print('\n'.join(unique_1))
print('\n'.join(unique_2))

当然,它重新发明了自行车的味道,但是你可以通过使用简单的算法代替花式差异构建和difflib的距离计算来获得更好的性能。或者,如果你绝对确定你的文件永远不会太大而不适合内存(不是最安全的假设,说实话),你可以使用设置差异:

set1=set()
set2=set()
for line in handle_1:
    set1.add(line)
for line in handle_2:
    set2.add(line)
set1_uniques = set1.difference(set2)
set2_uniques = set2.difference(set1)

答案 1 :(得分:-1)

你的代码可能有一些错误...你只能在同一行找到差异。如果2个文件具有不同的行数或数据未排序,则代码将出现问题...接下来是我的代码:

f1 = open('a.txt')
text1Lines = f1.readlines()
f2 = open('b.txt')
text2Lines = f2.readlines()
set1 = set(text1Lines)
set2 = set(text2Lines)
diffList = (set1|set2)-(set1&set2)