Вопрос

В «Погружении в Python 3» я прочитал, что «Метод readlines() теперь возвращает итератор, поэтому он так же эффективен, как и xreadlines() в Python 2».Глянь сюда: http://diveintopython3.org/porting-code-to-python-3-with-2to3.html .Я не уверен, что это правда, потому что здесь об этом не упоминают: http://docs.python.org/release/3.0.1/whatsnew/3.0.html .Как я могу это проверить?

Это было полезно?

Решение

Так:

Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('/junk/so/foo.txt')
>>> type(f.readlines())
<class 'list'>
>>> help(f.readlines)
Help on built-in function readlines:

readlines(...)
    Return a list of lines from the stream.

    hint can be specified to control the number of lines read: no more
    lines will be read if the total size (in bytes/characters) of all
    lines so far exceeds hint.

>>>

Другие советы

Метод readlines не возвращает итератор в Python 3, он возвращает список

Help on built-in function readlines:

readlines(...)
    Return a list of lines from the stream.

Для проверки просто вызовите его из интерактивного сеанса — он вернет список, а не итератор:

>>> type(f.readlines())
<class 'list'>

Погружение в Python в данном случае кажется неправильным.


xreadlines был устарел с Python 2.3 когда файловые объекты стали собственными итераторами.Способ получить ту же эффективность, что и xreadlines вместо использования

 for line in f.xreadlines():

вам следует использовать просто

 for line in f:

Это даст вам тот итератор, который вам нужен, и поможет объяснить, почему readlines не нужно было менять его поведение в Python 3 — он все равно может возвращать полный список с помощью line in f идиома, дающая итеративный подход, и давно устаревший xreadlines был удален полностью.

Другие уже говорили уже, но просто водить домой, обычные файловые объекты - их собственные итераторы. Итак readlines() Возвращение итератор будет глупо, потому что он просто вернет файл, который вы его назвали. Вы можете использовать for Цикл, чтобы повторить в файле, как сказал Скотт, и вы также можете пройти их прямо в функции ITERTOOLS:

from itertools import islice
f = open('myfile.txt')
oddlines = islice(f, 0, None, 2)
firstfiveodd = islice(oddlines, 5)
for line in firstfiveodd:
  print(line)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top