Python:从stdin读取大量行

时间:2011-10-27 23:47:15

标签: python stdin readline

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

more hugefile.txt | python readstdin.py

问题是,只要我读了一行,程序就会冻结。

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

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

与sys.stdin.readline()

相同的问题

我真正想做的当然是阅读所有的行,但是有一个缓冲区,所以我不会耗尽内存。

我正在使用python 2.6

2 个答案:

答案 0 :(得分:11)

这应该在现代Python中有效:

import sys

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

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

python readstdin.py < hugefile.txt

答案 1 :(得分:2)

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

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