如何使用;用开放的;比较python中两个文件的不同

如何使用;用开放的;比较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) 运行代码时,输出为:

我是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)
运行代码时,输出为:

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的(轻轻哭泣)屏幕截图中是正确的