2017-06-04 73 views
0

我想从一个文件中的一些样品行了,这是我的方法For循环下With语句工作不正常

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 

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

lc = sum(1 for x in f) 

它再次工作。

非常感谢!

回答

3

您已经阅读文件一次,当你有这行代码:

lc = sum(1 for x in f) 

现在,当您尝试enumerate上的文件再次,指针是在文件,从而结束不能读取任何东西。

如果你想从开始在条件相同的再次读取该文件,您可以设置指针为0 enumerate前:

f.seek(0) 
+1

哇,真的,是我不好,我应该详细了解如何与声明。非常感谢你 – pthphap

+0

很高兴帮助。也请阅读:[我应该怎么做,当有人回答我的问题?](https://stackoverflow.com/help/someone-answers) – AKS

+0

@QSnake这不是'with'属性,但'开放'-ed文件对象 – Aprillion