Я пытаюсь прочитать большой файл данных (= миллионы строк в очень специфическом формате), используя предварительно встроенную (в C) подпрограмму.Я хочу затем получить результаты этого, построчно, с помощью функции генератора.
Я могу прочитать файл ОК, но где только что запущен:
<command> <filename>
прямо в Linux будет построчно печатать результаты, как он находит их, яНе повезло, пытаясь повторить это в моей функции генератора.Кажется, что весь лот выводится в виде одной строки, которую мне нужно разбить на новую строку, и, конечно, тогда все нужно прочитать, прежде чем я получу строку 1.
Этот код будет читать файл, без проблем:
import subprocess
import config
file_cmd = '<command> <filename>'
for rec in (subprocess.check_output([file_cmd], shell=True).decode(config.ENCODING).split('\n')):
yield rec
(ENCODING установлен в config.py для iso-8859-1 - это шведский сайт)
У меня работает код, который дает мне данные, но впри этом он пытается удержать в памяти все это.У меня есть файлы большего размера, чтобы обработать их, что может привести к потере доступной памяти, так что это не вариант.
Я играл с bufsize на Popen, но не имел никакого успеха (а также, я не могу декодировать или разбивать после Popen, хотя я предполагаю, что факт, что мне нужно разделить прямо сейчас, на самом деле мойпроблема!).