2010-08-22 2 views
8

In Python 2 hatten Dateiobjekte eine xreadlines() -Methode, die einen Iterator zurückgab, der die Datei Zeile für Zeile lesen würde. In Python 3 existiert die xreadlines() -Methode nicht mehr, und readies() gibt immer noch eine Liste zurück (kein Iterator). Hat Python 3 etwas ähnlich wie xreadlines()?Was ersetzt xreadlines() in Python 3?

Ich weiß, ich

for line in f: 

tun können, statt

for line in f.xreadlines(): 

Aber ich würde auch verwenden xreadlines möchten() ohne eine for-Schleife:

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

* Sie können ein Iterator nicht * Index. 'zip ([1,2,3], [4,5,6]) [0]' -> Fehler. – kennytm

+0

@KennyTM Sie haben Recht. Ich löschte den Teil von mir, der sagte "Sie können einen Iterator indizieren". Ich dachte, ich kann einen Iterator indizieren, weil ich Bereich (10) [7] tun kann, aber das bedeutet nicht, dass ich einen Iterator indizieren kann. Vielen Dank. – snakile

Antwort

12

Die Objektdatei selbst ist bereits ein iterable.

>>> 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 ein beliebiges Element aus einem iterable zu bekommen.

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

wie diesen (Generator Ausdruck):

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