मेरे पास एक विशाल .txt फ़ाइल है जिसमें लगभग १०० मीटर लाइनें हैं, और मैं इसकी सामग्री को पंक्ति द्वारा सूची पंक्ति में सहेजना चाहता हूं।

मैं इसे प्राप्त करने के लिए निम्नलिखित कोड का उपयोग कर रहा हूं:

tmp=[]
with open('xy.txt') as f:
    for line in f:
        tmp.append(line)

अब इसके साथ समस्या यह है कि यह कोड तब तक मेमोरी जारी नहीं करता है जब तक कि पूरी फाइल नहीं पढ़ी जाती है, इस प्रकार थोड़ी देर बाद यह मेमोरी से बाहर हो जाती है।

मेरा प्रश्न यह है कि क्या इस कार्य स्मृति को कुशलतापूर्वक पूरा करने का कोई तरीका है?

2
G.David 31 मार्च 2020, 16:35

1 उत्तर

सबसे बढ़िया उत्तर

आप एक जनरेटर को परिभाषित कर सकते हैं जो लाइन से लाइन उत्पन्न करता है:

def gen():
    with open('xy.txt') as fh:
        yield from fh

यदि आपको इसके केवल एक विशिष्ट भाग की आवश्यकता है, तो आप का उपयोग कर सकते हैं itertools.islice उस स्लाइस को चुनने के लिए:

import itertools as it

data = it.islice(gen(), 10**6, 10**7)
2
a_guest 31 मार्च 2020, 13:51