2011-10-17 100 views
7

我們在磁盤中有幾個大文件(大於RAM的大小)。我想在Python中逐行讀取它們並在終端中輸出結果。我經歷了[1]和[2],但是我正在尋找不等到整個文件被讀入內存的方法。如何在Python中一行一行地讀取文件(或stdin)而不是等待讀取整個文件

我將利用這兩種命令:

cat fileName | python myScript1.py 
python myScript2.py fileName 

[1] How do you read from stdin in Python? [2] How do I write a unix filter in python?

回答

8

這是在Python standard behavior of file objects

with open("myfile.txt", "r") as myfile: 
    for line in myfile: 
     # do something with the current line 

for line in sys.stdin: 
    # do something with the current line 
+0

感謝您的快速回復。 – BiGYaN

4

只要迭代file

with open('huge.file') as hf: 
    for line in hf: 
    if 'important' in line: 
     print(line) 

這將需要ö (1)記憶。

從標準輸入讀取,只需在sys.stdin而不是hf迭代:

import sys 
for line in sys.stdin: 
    if 'important' in line: 
    print(line) 
+0

我是一個新手,蟒蛇,你能解釋一下「簡單地遍歷sys.stdin不是HF」。你的意思是'在sys.stdin中行嗎? – BiGYaN

+1

是的,'sys.stdin'只是一個[文件對象](http://docs.python.org/library/sys.html?highlight=stdin#sys.stdin),其行爲與您手動打開的文件類似。 –

0
if __name__ == '__main__': 
    while 1: 
     try: 
      a=raw_input() 
     except EOFError: 
      break 
     print a 

這將從stdin直到EOF讀取。 要使用第二種方法讀取一個文件,你可以用添的方法

with open("myfile.txt", "r") as myfile: 
    for line in myfile: 
     print line 
     # do something with the current line 
+0

感謝這兩種方法:) – BiGYaN

+2

這種從stdin讀取的方法非常麻煩。 'sys.stdin'是一個類似文件的對象,可以用來代替。 – phihag

相關問題