For语句下的循环不能正常工作

时间:2017-06-04 07:54:21

标签: python python-2.7

我正在尝试从文件中获取一些示例行,这是我的方法

import gzip, random

random_set = []
with gzip.open('/home/qsnake/Downloads/bigfile.txt.gz') as f:
    lc = sum(1 for x in f)
    random_set += random.sample(xrange(lc), 3)
    for i, x in enumerate(f):
        if i in random_set:
            print "First loop", str(i)
            break

with gzip.open('/home/qsnake/Downloads/biggfile.txt.gz') as f:
    for i, x in enumerate(f):
        if i in random_set:
            print "Second loop", str(i)
            break

结果如下

Second loop 4

我不知道为什么第一个With语句中的for循环不起作用,如果我删除

lc = sum(1 for x in f)

再次有效。

非常感谢!!!

1 个答案:

答案 0 :(得分:3)

在代码中包含以下行时,您已经读过一次文件:

lc = sum(1 for x in f)

现在,当您再次尝试enumerate文件时,指针位于文件的末尾,因此无法读取任何内容。

如果你想在条件相同的情况下从start开始再次读取文件,可以在enumerate之前将指针设置为0:

f.seek(0)