Как читать файл (или stdin) построчно в Python, не ожидая прочтения всего файла - PullRequest
7 голосов
/ 17 октября 2011

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

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

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

[1] Как вы читаете со стандартного ввода в Python? [2] Как мне написать Unix-фильтр на Python?

Ответы [ 3 ]

8 голосов
/ 17 октября 2011

Это стандартное поведение файловых объектов в 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
4 голосов
/ 17 октября 2011

Просто переберите файл :

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

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

Для чтения из стандартного ввода просто переберите sys.stdin вместо hf:

import sys
for line in sys.stdin:
  if 'important' in line:
    print(line)
0 голосов
/ 17 октября 2011
if __name__ == '__main__':
    while 1:
        try:
            a=raw_input()
        except EOFError:
            break
        print a

Это будет читать со стандартного ввода в EOF.Чтобы прочитать файл, используя второй метод, вы можете использовать метод Тима

т.е.

with open("myfile.txt", "r") as myfile:
    for line in myfile:
        print line
        # do something with the current line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...