在迭代文本文件和列表的过程中,我发现了for
循环的意外行为。
文本文件test.txt
仅包含两个字符串:1)He said:
和2)We said:
。
第一个for
+ for
循环
file_ = open('c:\\Python27\\test.txt', 'r')
list_ = ['Alpha','Bravo','Charlie']
try:
for string in file_:
for element in list_:
print string, element
except StandardError:
print 'Ooops'
返回绝对可预期的结果:
He said: Alpha
He said: Bravo
He said: Charlie
We said: Alpha
We said: Bravo
We said: Charlie
但如果for
订单已更改为
file_ = open('c:\\Python27\\test.txt', 'r')
list_ = ['Alpha','Bravo','Charlie']
try:
for element in list_:
for string in file_:
print string, element
except StandardError:
print 'Ooops'
结果完全不同:
He said: Alpha
We said: Alpha
看起来第一个for
变得难以辨认。为什么呢?
答案 0 :(得分:3)
当您完成文件的for循环时,您“消耗”它。您必须使用file_.seek(0)
返回外部循环的每次迭代的开头。或者使用原始循环排序。
您可以使用此简化示例复制行为:
for string in file_:
print string
for string in file_:
print string
你会看到第二个循环什么也没做。
答案 1 :(得分:2)
您需要使用file_.seek(0)
返回文件的开头,以便重新遍历其内容。
您已经通过:for string in file_:
进行了迭代,因此通过调用file_.tell()
获得的当前位置将是文件的大小(以字节为单位)(如果我没有记错的话),表示结束