पायथन pickle मॉड्यूल का उपयोग पायथन ऑब्जेक्ट संरचनाओं को सीरियलाइज़ और डी-सीरियलाइज़ करने के लिए किया जाता है। किसी भी प्रकार के पायथन ऑब्जेक्ट्स (सूची, शब्दकोश, आदि) को बाइट स्ट्रीम (0 और 1) में परिवर्तित करने की प्रक्रिया को पिकलिंग या सीरियलाइज़ेशन या फ्लैटनिंग या मार्शलिंग कहा जाता है। हम पिकलिंग के माध्यम से उत्पन्न बाइट स्ट्रीम को अनपिकलिंग नामक प्रक्रिया द्वारा वापस पायथन ऑब्जेक्ट्स में परिवर्तित कर सकते हैं।
पिकल क्यों?: वास्तविक दुनिया के परिदृश्य में, पिकलिंग और अनपिकलिंग का उपयोग व्यापक है क्योंकि वे हमें एक सर्वर/सिस्टम से दूसरे में डेटा को आसानी से स्थानांतरित करने और फिर इसे फ़ाइल या डेटाबेस में संग्रहीत करने की अनुमति देते हैं।
सावधानी: किसी अविश्वसनीय स्रोत से प्राप्त डेटा को अनपिकल न करने की सलाह दी जाती है क्योंकि वे सुरक्षा खतरा पैदा कर सकते हैं। हालांकि, pickle मॉड्यूल के पास दुर्भावनापूर्ण डेटा को पिकलिंग करते समय जानने या अलार्म उठाने का कोई तरीका नहीं है।
केवल pickle मॉड्यूल आयात करने के बाद हम पिकलिंग और अनपिकलिंग कर सकते हैं। pickle आयात निम्नलिखित कमांड का उपयोग करके किया जा सकता है:
import pickle
पिकल उदाहरण:
नीचे एक सरल प्रोग्राम है कि कैसे एक सूची को पिकल करें:
एक साधारण सूची को पिकल करें: Pickle_list1.py
import pickle
mylist = ['a', 'b', 'c', 'd']
with open('datafile.txt', 'wb') as fh:
pickle.dump(mylist, fh)
उपरोक्त कोड में, सूची - "mylist" में चार तत्व ('a', 'b', 'c', 'd') हैं। हम फ़ाइल को "wb" मोड में खोलते हैं "w" के बजाय क्योंकि सभी ऑपरेशन वर्तमान कार्य निर्देशिका में बाइट्स का उपयोग करके किए जाते हैं। "datafile.txt" नामक एक नई फ़ाइल बनाई जाती है, जो mylist डेटा को बाइट स्ट्रीम में परिवर्तित करती है।
एक साधारण सूची को अनपिकल करें: unpickle_list1.py
import pickle
pickle_off = open("datafile.txt", "rb")
emp = pickle.load(pickle_off)
print(emp)
आउटपुट: उपरोक्त स्क्रिप्ट चलाने पर, आप अपने mylist डेटा को फिर से आउटपुट के रूप में देख सकते हैं।
['a', 'b', 'c', 'd']
एक साधारण शब्दकोश को पिकल करें:
import pickle
EmpID = {1: "Zack", 2: "53050", 3: "IT", 4: "38", 5: "Flipkart"}
pickling_on = open("EmpID.pickle", "wb")
pickle.dump(EmpID, pickling_on)
pickling_on.close()
शब्दकोश को अनपिकल करें:
import pickle
pickle_off = open("EmpID.pickle", 'rb')
EmpID = pickle.load(pickle_off)
print(EmpID)
उपरोक्त स्क्रिप्ट (अनपिकल) चलाने पर हमें अपना शब्दकोश वापस मिल जाता है जैसा हमने पहले आरंभ किया था। साथ ही, कृपया ध्यान दें क्योंकि हम यहां बाइट्स पढ़ रहे हैं, हमने "r" के बजाय "rb" का उपयोग किया है।
आउटपुट
{1: 'Zack', 2: '53050', 3: 'IT', 4: '38', 5: 'Flipkart'}
पिकल अपवाद
पिकल मॉड्यूल के साथ काम करते समय उठाए जाने वाले कुछ सामान्य अपवाद नीचे दिए गए हैं:
Pickle.PicklingError: यदि पिकल ऑब्जेक्ट पिकलिंग का समर्थन नहीं करता है, तो यह अपवाद उठाया जाता है।
Pickle.UnpicklingError: यदि फ़ाइल में खराब या दूषित डेटा है।
EOFError: यदि फ़ाइल का अंत पता चलता है, तो यह अपवाद उठाया जाता है।
फायदे:
जटिल डेटा को सहेजने के लिए काम आता है।
उपयोग में आसान, हल्का और कई लाइनों के कोड की आवश्यकता नहीं होती।
जनरेट की गई पिकल्ड फ़ाइल आसानी से पठनीय नहीं है और इस प्रकार कुछ सुरक्षा प्रदान करती है।
नुकसान:
पायथन के अलावा अन्य भाषाएं पिकल्ड पायथन ऑब्जेक्ट्स को पुनर्निर्मित करने में सक्षम नहीं हो सकती हैं।
दुर्भावनापूर्ण स्रोतों से डेटा अनपिकल करने का जोखिम।