我正在尝试从文件中获取一些示例行,这是我的方法
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)
再次有效。
非常感谢!!!
答案 0 :(得分:3)
在代码中包含以下行时,您已经读过一次文件:
lc = sum(1 for x in f)
现在,当您再次尝试enumerate
文件时,指针位于文件的末尾,因此无法读取任何内容。
如果你想在条件相同的情况下从start开始再次读取文件,可以在enumerate
之前将指针设置为0:
f.seek(0)