我正在尝试使用预构建(以C语言编写)例程读取大型数据文件(=数百万行,以非常特定的格式)。然后,我想通过生成器函数逐行添加结果。
我可以读取文件,但是可以正常运行:
<input autocomplete="off">
会在找到结果时逐行打印结果,我没有运气尝试在生成器函数中复制此结果。似乎将整个批次输出为单个字符串,我需要在换行符上进行分割,当然,在生成第1行之前,所有内容都需要阅读。
此代码将读取文件,没问题:
<command> <filename>
(在config.py中将ENCODING设置为iso-8859-1-这是瑞典语站点)
我拥有的代码可以正常工作,因为它为我提供了数据,但是这样做却试图将全部存储在内存中。我要处理的文件大于此文件,可能会耗尽可用内存,因此这不是一个选择。
我在Popen上玩过bufsize,但没有成功(而且,在Popen之后我无法解码或分割,尽管我想我现在需要分割的事实实际上是我的问题!)
答案 0 :(得分:0)
我想我现在正在处理这个问题,所以如果其他人稍后再寻找它,我会回答我自己的问题...
proc = subprocess.Popen(shlex.split(file_cmd), stdout=subprocess.PIPE)
while True:
output = proc.stdout.readline()
if output == b'' and proc.poll() is not None:
break
if output:
yield output.decode(config.ENCODING).strip()