【问题标题】:Python: Read huge number of lines from stdinPython:从标准输入读取大量行
【发布时间】:2011-12-16 22:45:23
【问题描述】:

我正在尝试使用 python 从标准输入中读取大量行。

more hugefile.txt | python readstdin.py

问题是程序在我只读了一行后就冻结了。

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

这会打印前 8 个字节,但我希望它会终止,但它永远不会终止。我认为这不仅仅是读取第一个字节,而是尝试将整个文件读入内存。

sys.stdin.readline() 也有同样的问题

我真正想要做的当然是读取所有行,但要使用缓冲区,这样我就不会耗尽内存。

我正在使用 python 2.6

【问题讨论】:

标签: python stdin readline


【解决方案1】:

这应该在现代 Python 中有效地工作:

import sys

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

然后您可以像这样运行脚本:

python readstdin.py < hugefile.txt

【讨论】:

  • 这里的内存是如何工作的?它一次加载一行,并在下一行读入时将其从缓冲区中删除?谢谢
  • 是的,一次读取一行并将其设置为行变量。 line 的旧值将在丢失时被回收。
【解决方案2】:

Back in the day, you had to use xreadlines to get efficient huge line-at-a-time IO -- 文档现在要求您使用 for line in file

当然,这仅在您实际一次处理一条线时才有帮助。如果您只是读取大二进制 blob 以传递给其他东西,那么您的其他机制可能同样有效。

【讨论】:

    最近更新 更多