Является ли файл-объект в python итерабельным

У меня есть файл test.txt:

this is 1st line this is 2nd line this is 3rd line 

следующий код

 lines = open("test.txt", 'r') for line in lines: print "loop 1:"+line for line in lines: print "loop 2:"+line 

только отпечатки:

 loop 1:this is 1st line loop 1:this is 2nd line loop 1:this is 3rd line 

Он вообще не печатает loop2.

Два вопроса:

  1. объект файла, возвращаемый функцией open (), является ли он итерируемым? поэтому его можно использовать в цикле for?

  2. почему loop2 не печатается вообще?

5 Solutions collect form web for “Является ли файл-объект в python итерабельным”

Это не только итеративный , но итератор , поэтому он может только перемещаться по файлу один раз. Вы можете сбросить указатель файла с помощью .seek(0) как многие из них предложили, но в большинстве случаев вы должны только перебирать один файл.

Да, файловые объекты являются итерабельными, но чтобы вернуться к началу файла, вам нужно использовать lines.seek(0) , так как после первого цикла вы находитесь в конце файла.

Да, файловые объекты являются итераторами.

Как и все итераторы, вы можете перебирать их только один раз , после чего итератор исчерпан. Указатель чтения файла находится в конце файла. Повторно откройте файл или используйте .seek(0) чтобы перемотать указатель файла, если вам нужно снова зациклиться.

Кроме того, старайтесь избегать циклического перемещения по файлу дважды; извлекать то, что вам нужно, в другую структуру данных (список, словарь, набор, кучу и т. д.) во время первого цикла.

Вы уже находитесь в конце файла. Файловые объекты являются итераторами. Как только вы перебираете их, вы находитесь на конечной позиции. Итерация снова не начнется с самого начала. Если вы хотите снова начать с строки один, вам нужно использовать lines.seek(0) .

Было бы лучше, однако, переписать код, чтобы файл не нужно повторять дважды. Прочитайте все строки в каком-либо списке или выполните всю обработку в одном цикле.

  • Что означает «итерируемый» в Python?
  • python делает класс итерабельным, возвращая встроенный iterable
  • Как проверить, является ли объект итерабельным в Python?
  • Python 3: применить оператор по итерабельному
  • Unmitest assertEqual и iterables - проверяют содержимое
  • «Возможна только повторная» ошибка Python
  • Стиль Python для длины и формата строки при распаковке многих возвращаемых значений
  • как встроенная функция python iter () преобразует список python в итератор?
  • Python - лучший язык программирования в мире.