如何编写一个处理文本流的Python程序?
抱歉如果这个问题有人问过。请问我该如何写一个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
当然,你也可以把其他程序的输出通过管道传递到这里。