Как читать файл (или 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