Python:从stdin读取大量行
我正在尝试用Python从标准输入读取大量的行。
more hugefile.txt | python readstdin.py
问题是,当我只读取了一行后,程序就卡住了。
print sys.stdin.read(8)
exit(1)
这段代码打印了前8个字节,但我本以为它会结束,结果却一直没有结束。我觉得它并不是只读取前面的字节,而是试图把整个文件都读到内存里。
使用sys.stdin.readline()时也遇到同样的问题。
我真正想做的当然是读取所有的行,但我希望能使用一个缓冲区,这样就不会耗尽内存。
我使用的是Python 2.6。
2 个回答
2
以前,你需要用 xreadlines
来高效地一次读取一大行数据,现在文档建议你用 for line in file
来做。
当然,这种方法只有在你真的需要逐行处理数据的时候才有用。如果你只是读取一些大的二进制数据块,然后把它们传给其他地方,那么你用其他的方法可能同样有效。
11
在现代的Python中,这样做应该会很有效率:
import sys
for line in sys.stdin:
# do something...
print line,
你可以像这样运行这个脚本:
python readstdin.py < hugefile.txt