The readlines method doesn't return an iterator in Python 3, it returns a list
Help on built-in function readlines:
readlines(...)
Return a list of lines from the stream.
To check, just call it from an interactive session - it will return a list, rather than an iterator:
>>> type(f.readlines())
<class 'list'>
Dive into Python appears to be wrong in this case.
xreadlines
has been deprecated since Python 2.3 when file objects became their own iterators. The way to get the same efficiency as xreadlines
is instead of using
for line in f.xreadlines():
you should use simply
for line in f:
This gets you the iterator that you want, and helps to explain why readlines
didn't need to change its behaviour in Python 3 - it can still return a full list, with the line in f
idiom giving the iterative approach, and the long-deprecated xreadlines
has been removed completely.
for line in f.xreadlines():
will have converted it tofor line in f:
years ago. – Ennis