2011-10-17 17 views
7

पढ़ने की प्रतीक्षा नहीं कर रहा है हमारे पास डिस्क में कुछ बड़ी फ़ाइलें (रैम के आकार से अधिक) हैं। मैं उन्हें पाइथन में लाइन से लाइन और टर्मिनल में आउटपुट परिणाम पढ़ना चाहता हूं। मैं [1] और [2] से गुजर चुका हूं, लेकिन मैं उन तरीकों की तलाश में हूं जो पूरी फ़ाइल को स्मृति में पढ़ने तक प्रतीक्षा नहीं करते हैं।पाइथन में लाइन द्वारा फ़ाइल (या 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

यह अजगर में 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) स्मृति।

stdin से पढ़ने के लिए बस sys.stdin बजाय hf से अधिक पुनरावृति:

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

उपयोग कर सकते हैं मैं एक अजगर नौसिखिया हूँ, आप कृपया समझा सकते हैं "बस hf के बजाय sys.stdin से अधिक पुनरावृति"। क्या आपका मतलब 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 

यह स्टडीन टिल ईओएफ से पढ़ा जाएगा। दूसरी विधि का उपयोग कर एक फ़ाइल को पढ़ने के लिए, आपको टिम विधि

अर्थात

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

संबंधित मुद्दे