如何使用“ with open”来比较python中两个文件的不同

luo*_* mo -4 python

我是Python的新手。我想比较两个文件(1.txt和2.txt)。

1.txt的内容:

a
b
c
Run Code Online (Sandbox Code Playgroud)

2.txt的内容:

a
b
c
d
Run Code Online (Sandbox Code Playgroud)

程序代码:

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)
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,输​​出为:

b

c

d
Run Code Online (Sandbox Code Playgroud)

在我看来,它只应输出字母“ d”(在2.txt中而不是1.txt中)。因此,任何人都可以说出为什么输出如图片所示吗?

然后,我调试程序,并在右上角观察两个变量:“ f1.readlines()”和“ f2.readlines()”。

我在手表窗口的第3行中使用了“ Step Over” ,“ f1.readlines()”和f2.readlines()”仍然为空,我无法理解。

在此处输入图片说明

当我想在第4行使用“ Step Over”时,窗口变为: 在此处输入图片说明

所有可用的商品均不可用

所以,我的问题是:

1为什么我的代码无法工作?

2比较“ 1.txt”和“ 2.txt”的正确代码是什么?

谢谢!

Use*_*ess 5

  1. 读取文件中的所有行之后,文件中就没有更多行要读取了,这在定义上就差不多了。

    因此,在您第一次呼叫之后f1.readlines(),每个后续呼叫都将返回一个空列表。

    您要么需要seek重新开始,要么保存结果readlines()(假设两个文件都将始终存储在内存中)

  2. 正确的代码可能会使用 difflib