2017-06-04 69 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