Python: читать огромное количество строк из стандартного ввода - PullRequest
7 голосов
/ 28 октября 2011

Я пытаюсь прочитать огромное количество строк из стандартного ввода с помощью Python.

more hugefile.txt | python readstdin.py

Проблема в том, что программа зависает, как только я прочитал только одну строку.

print sys.stdin.read(8)
exit(1)

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

Та же проблема с sys.stdin.readline ()

Что я действительно хочу сделать, так это, конечно, прочитать все строки, но с буфером, чтобы у меня не хватило памяти.

Я использую Python 2.6

Ответы [ 2 ]

11 голосов
/ 28 октября 2011

Это должно работать эффективно в современном Python:

import sys

for line in sys.stdin:
    # do something...
    print line,

Затем вы можете запустить скрипт так:

python readstdin.py < hugefile.txt
2 голосов
/ 28 октября 2011

Раньше вам приходилось использовать xreadlines, чтобы получить эффективную огромную линейную операцию ввода-вывода - и теперь документы просят вас использовать for line in file.

Конечно, это полезно, только если вы на самом деле работаете над линиями по одному.Если вы просто читаете большие двоичные двоичные объекты, чтобы передать что-то еще, то ваш другой механизм может быть столь же эффективным.

...