2011-03-11 87 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,我只是想明白它是如何被利用的。

相關問題