如何编写一个处理文本流的Python程序?

4 投票
3 回答
30604 浏览
提问于 2025-04-16 13:30

抱歉如果这个问题有人问过。请问我该如何写一个Python脚本来处理一行一行的数据流呢?我需要这样做是因为我正在处理的文件非常大,我不想把整个文件都读到内存里。

我知道你可以一次读取文件的一行,但我想要的是能够处理文本流的东西。

3 个回答

0
f = open('somefile.txt')
for line in f:
    process(line)

其实,f可以是任何可以被遍历的东西,比如说一个字符串的列表,或者如果你想从标准输入读取数据的话,也可以是sys.stdin

7

你的情况听起来正好符合fileinput模块的设计目的。这样你可以这样做:

python script.py file1.txt file2.txt file3.txt file4.txt

然后在script.py

import fileinput
for line in fileinput.input():
    # do stuff here

使用fileinput的一个额外好处是,你可以做类似于Space_C0wb0y建议的,添加一个破折号作为第一个参数:

python script.py - < file.txt

或者

cat file.txt | python script.py -

fileinput在Space_C0wb0y链接的问题的回答中也提到过,我只是想详细说明一下它是如何被利用的。

16

你可以直接从 stdin 读取数据,就像这个 回答 中描述的那样。代码看起来是这样的:

for line in sys.stdin:
    # do suff

如果你想处理一个文件,那就可以像这样调用脚本(在Unix系统上):

cat file.txt | python script.py

当然,你也可以把其他程序的输出通过管道传递到这里。

撰写回答