如果这是一个重复的问题,我很抱歉。如何编写一个python脚本来将数据作为一行流处理?我需要这样做,因为我正在处理的文件是巨大的,我不想将文件读入内存。如何用python编写程序来处理文本流?
我知道您可以一次读取文件的一行,但我想要处理文本流的东西。
如果这是一个重复的问题,我很抱歉。如何编写一个python脚本来将数据作为一行流处理?我需要这样做,因为我正在处理的文件是巨大的,我不想将文件读入内存。如何用python编写程序来处理文本流?
我知道您可以一次读取文件的一行,但我想要处理文本流的东西。
您可以从stdin
中读取数据,如answer中所述。这看起来像在代码:
for line in sys.stdin:
# do suff
如果你想处理一个文件,然后就这样调用脚本(在Unix平台上):当然管道输出的
cat file.txt | python script.py
你可以还有其他任何程序。
f = open('somefile.txt')
for line in f:
process(line)
其实f
可以是任何东西是可迭代的,因此,例如字符串列表,甚至sys.stdin
,如果你想从标准输入读取。
为了完整起见,您应该添加一个f.close()或者使用_with_块。 – extraneon 2011-03-11 12:47:19
您说得对,那是假设。但是,如果这是所有程序正在做的事情(读取行和调用'process()'),那么在明确关闭文件时没有意义。 – 2011-03-11 12:49:48
提问这类问题的人通常是初学者,因此谨慎只向他们展示最好的做法,因为他们不知道更好。 – 2011-03-11 12:56:32
您的情况听起来几乎完全是the fileinput module的设计目的。这样,你可以这样做:
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 -
对Space_C0wb0y链接的问题的回答中提到了fileinput,我只是想明白它是如何被利用的。
阅读“一行行”和“一次读取文件的一行”有什么区别? – 2011-03-11 12:35:13
那么,在输入流中,我不在乎线路来自哪里。我没有对输入进行文件处理。当我说一次读取oneline时,这意味着我知道该文件,我的程序负责打开和关闭它。 – Sam 2011-03-11 12:37:17