为什么嵌套for循环无法使用Python?

时间:2019-02-28 01:13:13

标签: python for-loop

外部foor循环仅执行一次。我无法检测出为什么会被遮挡的问题?

f=open("simpletextfile.txt")
for r in range(1,52):
    for line in f.readlines():
        print r

其中simpletextfile.txt包含消息This a message!!

3 个答案:

答案 0 :(得分:4)

因为您不能两次阅读文本文件。因此,在第一次迭代中,它将读取文件并打印“ 1”,其次数与文件中的行数相同。转到r==2时,它将尝试调用f.readlines(),但是由于已经读取了文件,因此它甚至在启动之前都会停止迭代。依此类推,直到r == 51

如果您进一步说明您要做什么,我们可能会更有效地提供帮助。

答案 1 :(得分:3)

调用readlines后文件已用尽,因为在随后的readlines调用中,由于已读取所有行,因此不会读取更多行。然后执行内部循环,但与该循环无关。如果您想阅读52行并打印r(我不知道为什么,但是可以),请执行以下操作

with open('simpletextfile.txt') as f:
    lines = f.readlines()
    for r in range(1, 52):
        for line in lines:
            print r

此外,尽管在此示例中您仅读取文件(Python会自动为您关闭文件),但是您应该自己明确.close()或将其包裹在with语句中,如上所述,最终将其关闭-不太草率。

答案 2 :(得分:1)

第一次调用f.readlines()时,它将返回一个列表,其中包含一项:['This a message!!']。但是,当您第二次调用f.readlines()时,依此类推,它将返回空列表[]。因此,当您对其进行循环时,由于列表为空,因此它根本不会循环。将f.readlines()分配给变量以解决您的问题

f = open("simpletextfile.txt")
for r in range(1,52):
    lines = f.readlines()
    for line in lines:
        print r