2011-10-17 13 views
7

Diskte çok büyük dosyalarımız (RAM boyutundan daha büyük) var. Onları python satırında okumak ve çıktı sonuçlarını terminalde okumak istiyorum. [1] ve [2] 'yi geçtim, ancak tüm dosya belleğe okunana kadar beklemeyen yöntemler arıyorum.Python'da bir dosya (veya stdin) satırının tamamı nasıl okunabilir Tüm dosyayı okumayı beklemiyor

I Bu komutlardan her ikisini de kullanarak olması:

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?

cevap

8

Bu Python standard behavior of file objects geçerli:

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

veya

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

Hızlı yanıt için teşekkürler. – BiGYaN

4

sadece file yineleme:

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

Bu gerektirecektir O (1) hafıza.

stdin'den okumak için, sadece sys.stdin yerine hf üzerinde yineleme:

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

kullanabilirsiniz. Sys.stdin satırında mı demek istiyorsun? – BiGYaN

+1

Evet, 'sys.stdin' yalnızca el ile açtığınız bir dosya gibi davranan bir [dosya nesnesi] (http://docs.python.org/library/sys.html?highlight=stdin#sys.stdin) 'dir. –

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

Bu, stdin til EOF'den okunacak. ikinci yöntemi kullanarak bir dosyayı okumak için "basitçe yerine hf arasında sys.stdin üzerinde yineleme", açıklamak misiniz Ben piton deneyimsizim Tim'in yöntem

yani

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

Her iki yöntem için de teşekkürler :) – BiGYaN

+2

Stdin'den okunan bu yöntem son derece hantal. sys.stdin, dosya benzeri bir nesnedir ve bunun yerine kullanılabilir. – phihag

İlgili konular