Python:从stdin读取大量行

7 投票
2 回答
9019 浏览
提问于 2025-04-17 05:09

我正在尝试用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

撰写回答