2010-08-22 40 views
8

在Python 2中,文件對象有一個xreadlines()方法,它返回一個迭代器,每次讀取一行文件。在Python 3中,xreadlines()方法不再存在,realines()仍然返回一個列表(不是迭代器)。 Python 3是否有類似於xreadlines()的東西?在Python 3中替代xreadlines()是什麼?

我知道我可以做

for line in f: 

,而不是

for line in f.xreadlines(): 

但是我也想沒有用把xreadlines()for循環:

print(f.xreadlines()[7]) #read lines 0 to 7 and prints line 7 
+1

你*不能*索引的迭代。 'zip([1,2,3],[4,5,6])[0]' - >錯誤。 – kennytm 2010-08-22 14:23:06

+0

@KennyTM你是對的。我刪除了部分我說「你可以索引一個迭代器」。我以爲我可以索引一個迭代器,因爲我可以做範圍(10)[7],但這並不意味着我可以索引一個迭代器。謝謝。 – snakile 2010-08-22 15:37:52

回答

12

文件對象本身已經是可迭代的了。

>>> f = open('1.txt') 
>>> f 
<_io.TextIOWrapper name='1.txt' encoding='UTF-8'> 
>>> next(f) 
'1,B,-0.0522642316338,0.997268450092\n' 
>>> next(f) 
'2,B,-0.081127897359,2.05114559572\n' 

Use itertools.islice擺脫一個可迭代的任意元素。

>>> f.seek(0) 
0 
>>> next(islice(f, 7, None)) 
'8,A,-0.0518101108474,12.094341554\n' 
1

這個怎麼樣(發電機表達式):

>>> f = open("r2h_jvs") 
>>> h = (x for x in f) 
>>> type(h) 
<type 'generator'>` 
相關問題