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

2024-09-29 23:24:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个文件中获取一些样本行,这是我的方法

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)

它又起作用了

多谢


Tags: intxtloophomefordownloadsaswith
1条回答
网友
1楼 · 发布于 2024-09-29 23:24:39

当代码中有以下行时,您已经读取了一次文件:

lc = sum(1 for x in f)

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

如果要在相同的with条件下从start重新读取文件,可以将指针设置为enumerate之前的0:

f.seek(0)

相关问题 更多 >

    热门问题