Python不等于'for'迭代

时间:2015-10-13 19:26:35

标签: python for-loop

在迭代文本文件和列表的过程中,我发现了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变得难以辨认。为什么呢?

2 个答案:

答案 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()获得的当前位置将是文件的大小(以字节为单位)(如果我没有记错的话),表示结束