Python 3.5 - if 语句中的 Startswith() 未按预期工作

Python 3.5 - Startswith() in if statement not working as intended

我正在研究一些简单的示例,但我遇到了这个示例,但无法弄清楚为什么我没有获得 loop2 的预期结果。循环 1 是我用来逐行查看正在发生的事情的循环。奇怪的是在第 1875 行,startwith returns 为真(见循环 1)但它没有在循环 2.

中打印

显然我遗漏了一些重要的东西。请帮我看看

文本文件位于:http://www.py4inf.com/code/mbox-short.txt

xfile = open("SampleTextData.txt", 'r')

cntr = 0
print("Loop 1 with STEPWISE PRINT STATEMENTS")
for line in xfile:
    cntr = cntr + 1
    if cntr >1873 and cntr < 1876:
        print(line)
        print(line.startswith('From: '))
        line = line.rstrip()
        print(line)
        print(cntr)
        print()



print("LOOP 2")
for line in xfile:
    line = line.rstrip()
    if line.startswith('From: '):
        print(line)

您打开的文件是一个迭代器,第一个循环已耗尽。

循环一次就完成了。第二个循环将不会执行,除非您关闭并重新打开它。

或者,您可以将其读入字符串或字符串列表。

xfile这样的文件对象是单遍迭代器。要遍历文件两次,您必须关闭并重新打开文件,或者使用搜索 return 到文件的开头:

xfile.seek(0)

只有这样,第二个循环才会遍历文件的行。

在开始循环 2 之前,您没有关闭并重新打开文件。从头到尾读取一个文件。循环 1 完成后,读取光标已经在文件末尾,因此没有任何内容可供循环 2 循环使用。