我正在使用Python并希望比较两个文件并找到每个文件都有的唯一行。我按照下面的说明进行操作,但速度太慢了。
f1 = open(file1)
text1Lines = f1.readlines()
f2 = open(file2)
text2Lines = f2.readlines()
diffInstance=difflib.Differ()
diffList = list(diffInstance.compare(text1Lines, text2Lines))
如何加快速度?
答案 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)