Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What substitutes xreadlines() in Python 3?

In Python 2, file objects had an xreadlines() method which returned an iterator that would read the file one line at a time. In Python 3, the xreadlines() method no longer exists, and realines() still returns a list (not an iterator). Does Python 3 has something similar to xreadlines()?

I know I can do

for line in f:

instead of

for line in f.xreadlines():

But I would also like to use xreadlines() without a for loop:

print(f.xreadlines()[7]) #read lines 0 to 7 and prints line 7
like image 439
snakile Avatar asked Aug 22 '10 11:08

snakile


2 Answers

The file object itself is already an 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 to get an arbitrary element from an iterable.

>>> f.seek(0)
0
>>> next(islice(f, 7, None))
'8,A,-0.0518101108474,12.094341554\n'
like image 95
kennytm Avatar answered Nov 13 '22 01:11

kennytm


how about this (generator expression):

>>> f = open("r2h_jvs")
>>> h = (x for x in f)
>>> type(h)
<type 'generator'>`
like image 23
Albert Visser Avatar answered Nov 13 '22 00:11

Albert Visser