如何使用;用开放的;比较python中两个文件的不同
我是Python新手。我想比较两个文件(1.txt和2.txt) 1.txt的内容:如何使用;用开放的;比较python中两个文件的不同,python,Python,我是Python新手。我想比较两个文件(1.txt和2.txt) 1.txt的内容: a b c 2.txt的内容: a b c d 程序代码: with open("1.txt") as f1: with open("2.txt") as f2: for line in f2.readlines(): if line not in f1.readlines(): print(line) 运行代码时,输出为:
a
b
c
2.txt的内容:
a
b
c
d
程序代码:
with open("1.txt") as f1:
with open("2.txt") as f2:
for line in f2.readlines():
if line not in f1.readlines():
print(line)
运行代码时,输出为:
b
c
d
在我看来,它应该只输出字母在2.txt中存在的“d”,而不是在1.txt中。
所以,任何人都能说出为什么输出像图中那样
然后我调试程序,观察两个变量:“f1.readlines()”和“f2.readlines()”在右角
我在watches窗口中的第3行“f1.readlines()”和f2.readlines()”中使用“单步执行”命令
还是空的,我想不出来
当我想对第4行使用“跨步”时,窗口如下所示:
并非所有变量都可用
所以,我的问题是:
1为什么我的代码不能工作
2比较“1.txt”和“2.txt”的正确代码是什么
谢谢
f1.readlines()
之后,后续每次调用都将返回一个空列表
您需要将搜索
返回到开头,或者保存readlines()的结果
(假设两个文件都始终适合内存)出于教育目的,您可以更改代码以执行以下操作:
with open("2.txt") as f2:
for line in f2.readlines():
with open("1.txt") as f1:
if line not in f1.readlines():
print(line)
而且它应该做正确的事情,原因是@无用(显然不是:)
请注意,您通常不应该这样做,它将采取J和K是每个文件中的行数的操作,而
difflib
中的算法将更加有效。在具有10k行的文件上尝试您的版本可能需要几分钟,而difflib
则需要几毫秒。可能需要几分钟重新评估f2
中每一行的f1
内容所导致的问题。@pault可能重复-op打开文件的方式没有任何问题,重新读取f1
每次迭代都可能是一个问题,尽管我看不到图像[被阻止]但是OP的缩进肯定有问题固定缩进,它在IDE的(轻轻哭泣)屏幕截图中是正确的