पायथन में एक फ़ाइल को पढ़ना और लिखना सूचियाँ

परिचय

पायथन प्रोग्रामर क्रमबद्ध डेटा संरचनाओं के रूप में सरणियों, सूचियों और शब्दकोशों का गहन उपयोग करते हैं। इन डेटा संरचनाओं को लगातार संग्रहीत करने के लिए ठीक से काम करने के लिए फ़ाइल या डेटाबेस की आवश्यकता होती है।

इस लेख में, हम देखेंगे कि फाइल करने के लिए एक सूची कैसे लिखी जाए, और उस सूची को वापस स्मृति में कैसे पढ़ा जाए।

सेवा मेरे फ़ाइल में डेटा लिखें, और करने के लिए फ़ाइल से डेटा पढ़ें, पायथन प्रोग्रामिंग भाषा मानक तरीके प्रदान करती है write() और read() एक ही लाइन से निपटने के लिए, साथ ही writelines() और readlines() कई लाइनों से निपटने के लिए। इसके अलावा, दोनों pickle और json मॉड्यूल क्रमबद्ध डेटा सेट से निपटने के चतुर तरीकों की भी अनुमति देते हैं।

ऊपर दिए पढ़ें () और लिखो() तरीके

पात्रों (तार) से निपटने के लिए मूल read() और write() तरीके बेहतरीन काम करते हैं। ऐसी सूची पंक्ति को फ़ाइल में पंक्ति द्वारा सहेजा जा रहा है listfile.txt निम्नानुसार किया जा सकता है:


places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    for listitem in places:
        filehandle.write(f'{listitem}n')

RSI listitem एक लाइन ब्रेक द्वारा बढ़ाया गया है "n", पहले, और फिर आउटपुट फ़ाइल में संग्रहीत। अब हम इस पर एक नज़र डाल सकते हैं कि फ़ाइल से पूरी सूची को कैसे पढ़ा जाए listfile.txt स्मृति में वापस:


places = []


with open('listfile.txt', 'r') as filehandle:
    for line in filehandle:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

ध्यान रखें कि आपको स्ट्रिंग के अंत से लाइन ब्रेक को हटाना होगा। इस मामले में, यह हमें मदद करता है कि पायथन स्ट्रिंग्स पर भी सूची संचालन की अनुमति देता है। यह निष्कासन केवल स्ट्रिंग पर ही एक सूची संचालन के रूप में किया जाता है, जो अंतिम तत्व के अलावा सब कुछ रखता है। इस तत्व में वर्ण है "n" जो यूनिक्स/लिनक्स सिस्टम पर लाइन ब्रेक का प्रतिनिधित्व करता है।

ऊपर दिए राइटलाइन्स () और रीडलाइन्स () तरीके

जैसा कि इस लेख की शुरुआत में बताया गया है, पायथन में भी दो विधियाँ हैं - writelines() और readlines() - क्रमशः एक चरण में कई पंक्तियाँ लिखना और पढ़ना। आइए डिस्क पर एक फ़ाइल में पूरी सूची लिखें:


places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    filehandle.writelines(f"{place for place in places_list}n")

डिस्क पर एक फ़ाइल से पूरी सूची को पढ़ने के लिए हमें यह करना होगा:


places = []


with open('listfile.txt', 'r') as filehandle:
    filecontents = filehandle.readlines()
    for line in filecontents:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

उपरोक्त कोड अन्य प्रोग्रामिंग भाषाओं से उधार लिए गए अधिक पारंपरिक दृष्टिकोण का अनुसरण करता है। आइए इसे और लिखें pythonic मार्ग:


places = []


with open('listfile.txt', 'r') as filehandle:
    places = [current_place.rstrip() for current_place in filehandle.readlines()]

सबसे पहले, फ़ाइल सामग्री के माध्यम से पढ़ा जाता है readlines(). दूसरे, ए में for प्रत्येक पंक्ति से लूप लाइन ब्रेक कैरेक्टर का उपयोग करके हटा दिया जाता है rstrip() तरीका। तीसरा, स्ट्रिंग को नई सूची आइटम के रूप में स्थानों की सूची में जोड़ा जाता है।

कोड से पहले लिस्टिंग की तुलना में बहुत अधिक कॉम्पैक्ट है, लेकिन शुरुआती पायथन प्रोग्रामर के लिए पढ़ना अधिक कठिन हो सकता है।

जॉबलिब मॉड्यूल का उपयोग करना

अब तक बताई गई प्रारंभिक विधियों में सूची को इस तरह से संग्रहीत किया जाता है कि मनुष्य अभी भी इसे पढ़ सकें - वस्तुतः एक फ़ाइल में एक अनुक्रमिक सूची। यह सरल रिपोर्ट बनाने या उपयोगकर्ताओं को आगे उपयोग करने के लिए निर्यात फ़ाइलों को आउटपुट करने के लिए बहुत अच्छा है, जैसे कि सीएसवी फाइलें। हालाँकि - यदि आपका उद्देश्य किसी सूची को केवल एक फ़ाइल में क्रमबद्ध करना है, जिसे बाद में लोड किया जा सकता है, तो इसे मानव-पठनीय प्रारूप में संग्रहीत करने की कोई आवश्यकता नहीं है।

RSI joblib मॉड्यूल पायथन ऑब्जेक्ट को डंप करने का सबसे आसान तरीका प्रदान करता है (वास्तव में कोई भी वस्तु हो सकती है):

import joblib

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

joblib.dump(places, 'places.sav')

places = joblib.load('places.sav')
print(places) 

joblib एक कुशल प्रारूप में वस्तुओं को क्रमबद्ध करने और बाद में उन्हें लोड करने का सबसे सरल और साफ तरीका है। आप किसी भी मनमाना प्रारूप का उपयोग कर सकते हैं, जैसे कि .sav, .data, आदि। यह वास्तव में कोई फर्क नहीं पड़ता - दोनों joblib और विकल्प जैसे pickle फाइलों को ठीक से पढ़ेगा।

ऊपर दिए अचार मॉड्यूल

के विकल्प के रूप में joblib, हम प्रयोग कर सकते हैं pickle! आईटी इस dump() विधि सूची को कुशलतापूर्वक बाइनरी डेटा स्ट्रीम के रूप में संग्रहीत करती है। सबसे पहले, आउटपुट फ़ाइल listfile.data बाइनरी लेखन के लिए खोला गया है ("wb") दूसरे, सूची को खोली गई फ़ाइल में का उपयोग करके संग्रहीत किया जाता है dump() तरीका:

import pickle

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.data', 'wb') as filehandle:
    
    pickle.dump(places, filehandle)

अगले चरण के रूप में, हम फ़ाइल से सूची को निम्नानुसार पढ़ते हैं। सबसे पहले, आउटपुट फ़ाइल listfile.data पढ़ने के लिए बाइनरी खोला जाता है ("rb") दूसरे, स्थानों की सूची का उपयोग करके फ़ाइल से लोड किया जाता है load() तरीका:

import pickle

with open('listfile.data', 'rb') as filehandle:
    
    placesList = pickle.load(filehandle)

यहां दो उदाहरण स्ट्रिंग्स के उपयोग को प्रदर्शित करते हैं। यद्यपि, pickle सभी प्रकार के पायथन ऑब्जेक्ट्स जैसे स्ट्रिंग्स, नंबर्स, सेल्फ-डिफ़ाइंड स्ट्रक्चर्स, और हर दूसरे बिल्ट-इन डेटा स्ट्रक्चर के साथ काम करता है जो पायथन प्रदान करता है।

JSON प्रारूप का उपयोग करना

बाइनरी डेटा प्रारूप pickle उपयोग पायथन के लिए विशिष्ट है। विभिन्न कार्यक्रमों के बीच अंतरसंचालनीयता में सुधार करने के लिए जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) उपयोग में आसान और मानव-पठनीय स्कीमा प्रदान करता है, और इस प्रकार फाइलों को क्रमबद्ध करने और उन्हें एपीआई पर साझा करने के लिए बहुत लोकप्रिय हो गया।

सर्वोत्तम प्रथाओं, उद्योग-स्वीकृत मानकों और शामिल चीट शीट के साथ, Git सीखने के लिए व्यावहारिक मार्गदर्शिका देखें। Googling Git कमांड को रोकें और वास्तव में सीखना यह!

निम्न उदाहरण दर्शाता है कि मिश्रित चर प्रकारों की सूची को आउटपुट फ़ाइल में कैसे लिखना है JSON मापांक। लिखने के लिए आउटपुट फ़ाइल खोलने के बाद, dump() विधि JSON संकेतन का उपयोग करके फ़ाइल में मूल सूची संग्रहीत करती है:

import json


basic_list = [1, "Cape Town", 4.6]


with open('listfile.txt', 'w') as filehandle:
    json.dump(basic_list, filehandle)

आउटपुट फ़ाइल की सामग्री को वापस मेमोरी में पढ़ना डेटा लिखने जितना आसान है। करने के लिए संबंधित विधि dump() नामांकित किया गया है load():

import json


with open('listfile.txt', 'r') as filehandle:
    basic_list = json.load(filehandle)

निष्कर्ष

हमने ऊपर दिखाए गए विभिन्न तरीकों में अचार और JSON का उपयोग करके बाइनरी स्ट्रीम के माध्यम से डेटा लिखने/पढ़ने से लेकर डंपिंग/लोडिंग डेटा तक शामिल हैं। यह एक सूची को लगातार संग्रहीत करने और इसे वापस स्मृति में पढ़ने को सरल बनाता है।

समय टिकट:

से अधिक स्टैकब्यूज