首页 > 解决方案 > 嵌套循环读取文件

问题描述

我是 python 新手,我对嵌套循环的一些特定用法有点困惑。

例如,我有两个文件(file1file2)。File1包含一些文本行:

line1
line2

并且file2还包含一些文本:

line1
line2
line3
line4
line5

我的脚本是:

with open('file1.txt', 'r') as file1:
    with open('file2.txt', 'r') as file2:
        for line in file1:
            for line2 in file2:
                print(line2),

所以我期望这样的输出:

line1
line2
line3
line4
line5
line1
line2
line3 
line4
line5

但我的输出实际上是:

line1
line2
line3
line4
line5

有人能解释一下为什么只执行内部循环吗?我错过了什么吗?将文件内容存储到列表时没有问题。

标签: python-2.7for-loop

解决方案


为什么只执行内部循环?

这种观察是错误的。两个循环都被执行了。

file对象是生成器。它们只能被迭代一次然后它们被认为是消耗的(即空的)。

在外部循环的第一次迭代中,file2尚未消耗,因此内部循环能够按预期执行。

从外循环的第二次迭代开始,file2完全消耗(即为空),因此外循环没有要执行的内容,基本上相当于:

for line in file1:
    for line2 in []:
        print(line2)

要解决此问题,请使用.readlines以列表形式获取文件的内容。

顺便说一句,您可以with在一行上有多个语句,从而节省缩进级别。另外,'r'是默认模式:

with open('file1.txt') as file1, open('file2.txt') as file2:
    ...

推荐阅读