我正在比较两个文本文件,但在某些情况下返回的结果是错误的,我已经验证当文件超过 200 行且仅在某些情况下会发生这种情况。
在比较中我只从 file2 中得到肯定的结果.
输入
这是我比较的两个文本文件。 我与 Google 驱动器链接共享它们,因为它们很长:
输出
它返回的是:
different
EL BOSQUE ENCANTADO,El Bosque Encantado,"PRECIO
12,00�"
何时应该返回:
different
CIBELES DE CINE,Galer�a de Cristal de CentroCentro,"PRECIO
7,00�"
通过测试我看到了如果我从文件末尾删除一个介绍并将其保留在 200 行,它会做得很好,但如果我超过 200 行,它就会出错。
代码
# BOOKSTORES
import difflib
import sys
# WE LOOK FOR THE DIFFERENCES AND PRINT THEM.
with open('file1.txt', encoding='utf8') as file_1, open('file2.txt', encoding='utf8') as file_2:
diff = difflib.Differ()
result = diff.compare(file_1.readlines(), file_2.readlines())
result = [line for line in result if line.startswith(("+ "))]
print(''.join(result))
sys.exit(1)
我做错了什么?可以用另一种方式来使其正确吗?
你的代码中出现错误的原因是,你正在使用
difflib.Differ
,它被设计用来逐行比较,而不是寻找文件之间的集合差异。在你的情况下,你似乎并不关心行的顺序,而是关心哪些行是唯一的。
让我们用一个更适合此任务的方法来重写你的代码:
import sys
# 从两个文件中读取行,去除前导/尾随空格并将其存储在集合中
with open('file1.txt', encoding='utf8') as file_1, open('file2.txt', encoding='utf8') as file_2:
lines_1 = {line.strip() for line in file_1}
lines_2 = {line.strip() for line in file_2}
# 查找 file2 中存在但 file1 中不存在的行
different_lines = lines_2 - lines_1
if different_lines:
print('different')
for line in different_lines:
print(line)
sys.exit(1)
else:
print('identical')
sys.exit(0)
这段代码执行以下操作:
- 逐行读取文件: 它从两个文件中读取行。
-
创建集合:
它为每个文件创建一个集合,它将存储文件中唯一的行(使用
set
自动删除重复项)。.strip()
方法用于在添加到集合之前删除每行中的前导和尾随空格,以确保一致的比较。 -
查找差异:
它查找
file2
中存在但file1
中不存在的行。 - 打印结果: 它打印不同的行或指示文件是否相同。
此方法更有效,因为它利用了集合操作,这通常比逐行比较快,尤其是对于大型文件。它还解决了由于行顺序无关紧要而可能导致你的原始代码出现的问题。
标签:python,text,compare,difflib From: 78790592