मेरे पास एक विशाल .txt फ़ाइल है जिसमें लगभग १०० मीटर लाइनें हैं, और मैं इसकी सामग्री को पंक्ति द्वारा सूची पंक्ति में सहेजना चाहता हूं।
मैं इसे प्राप्त करने के लिए निम्नलिखित कोड का उपयोग कर रहा हूं:
tmp=[]
with open('xy.txt') as f:
for line in f:
tmp.append(line)
अब इसके साथ समस्या यह है कि यह कोड तब तक मेमोरी जारी नहीं करता है जब तक कि पूरी फाइल नहीं पढ़ी जाती है, इस प्रकार थोड़ी देर बाद यह मेमोरी से बाहर हो जाती है।
मेरा प्रश्न यह है कि क्या इस कार्य स्मृति को कुशलतापूर्वक पूरा करने का कोई तरीका है?
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)
संबंधित सवाल
नए सवाल
python-3.x
पायथन प्रोग्रामिंग के बारे में प्रश्नों के लिए जो भाषा के संस्करण 3+ के लिए विशिष्ट हैं। सभी पायथन सवालों पर अधिक जेनेरिक [अजगर] टैग का उपयोग करें, और केवल यह जोड़ें यदि आपका प्रश्न संस्करण-विशिष्ट है। पायथन 2 प्रश्नों के लिए [अजगर -2] टैग का उपयोग करें।