2011-03-11 79 views
3

如果这是一个重复的问题,我很抱歉。如何编写一个python脚本来将数据作为一行流处理?我需要这样做,因为我正在处理的文件是巨大的,我不想将文件读入内存。如何用python编写程序来处理文本流?

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

+2

阅读“一行行”和“一次读取文件的一行”有什么区别? – 2011-03-11 12:35:13

+0

那么,在输入流中,我不在乎线路来自哪里。我没有对输入进行文件处理。当我说一次读取oneline时,这意味着我知道该文件,我的程序负责打开和关闭它。 – Sam 2011-03-11 12:37:17

回答

14

您可以从stdin中读取数据,如answer中所述。这看起来像在代码:

for line in sys.stdin: 
    # do suff 

如果你想处理一个文件,然后就这样调用脚本(在Unix平台上):当然管道输出的

cat file.txt | python script.py 

你可以还有其他任何程序。

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

其实f可以是任何东西是可迭代的,因此,例如字符串列表,甚至sys.stdin,如果你想从标准输入读取。

+1

为了完整起见,您应该添加一个f.close()或者使用_with_块。 – extraneon 2011-03-11 12:47:19

+0

您说得对,那是假设。但是,如果这是所有程序正在做的事情(读取行和调用'process()'),那么在明确关闭文件时没有意义。 – 2011-03-11 12:49:48

+1

提问这类问题的人通常是初学者,因此谨慎只向他们展示最好的做法,因为他们不知道更好。 – 2011-03-11 12:56:32

7

您的情况听起来几乎完全是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,我只是想明白它是如何被利用的。

相关问题