Как читать файл (или stdin) строка за строкой в Python, не ожидая чтения всего файла

у нас есть пара огромных файлов (больше, чем размер ОЗУ) на диске. Я хочу читать их строка за строкой в python и выводить результаты в terminal. Я прошел через [1] и [2], но я ищу методы, которые не ждут, пока весь файл будет прочитан в память.

Я бы использовал обе эти команды:

cat fileName | python myScript1.py
python myScript2.py fileName

[1] как Вы читаете из stdin в Python? [2] Как написать фильтр unix в python?

3 ответов


Это стандартное поведение объектов file в Python:

with open("myfile.txt", "r") as myfile:
    for line in myfile:
        # do something with the current line

или

for line in sys.stdin:
    # do something with the current line

просто перебирать :

with open('huge.file') as hf:
  for line in hf:
    if 'important' in line:
      print(line)

для этого потребуется O(1) память.

чтобы прочитать из stdin, просто повторите sys.stdin вместо hf:

import sys
for line in sys.stdin:
  if 'important' in line:
    print(line)

if __name__ == '__main__':
    while 1:
        try:
            a=raw_input()
        except EOFError:
            break
        print a

это будет читать от stdin до EOF. Чтобы прочитать файл с помощью второго метода, вы можете использовать метод Тима

то есть

with open("myfile.txt", "r") as myfile:
    for line in myfile:
        print line
        # do something with the current line