чтение из стандартного ввода, потребляя не больше памяти, чем необходимо - PullRequest
2 голосов
/ 16 июля 2010

Я пытаюсь создать построчный фильтр в Python.Тем не менее, stdin.readlines() читает все строки перед началом обработки, и python не хватает памяти (MemoryError).

Как я могу иметь только одну строку в памяти за раз?

Какой код у меня есть:

for line in sys.stdin.readlines():
    if( filter.apply( line ) ):
        print( line )

(примечание: я нахожусь на 2.6)

Ответы [ 2 ]

12 голосов
/ 16 июля 2010
for line in sys.stdin:
    ...

Или вызовите .readline() в цикле.

2 голосов
/ 16 июля 2010
import sys
while 1:
    line = sys.stdin.readline()
    if not line:
        break
    if (filter.apply(line)):
        print(line)
...