ऑब्जेक्ट सीरियलाइज़ेशन शब्द किसी वस्तु की स्थिति को बाइट स्ट्रीम में बदलने की प्रक्रिया को संदर्भित करता है। एक बार बन जाने के बाद, इस बाइट स्ट्रीम को आगे एक फ़ाइल में संग्रहीत किया जा सकता है या सॉकेट आदि के माध्यम से प्रेषित किया जा सकता है। दूसरी ओर बाइट स्ट्रीम से ऑब्जेक्ट को फिर से संगठित करना deserialization कहा जाता है।
क्रमांकन और अक्रमांकन के लिए पायथन की शब्दावली क्रमशः अचार और अनपिकलिंग है। पाइथॉन के मानक पुस्तकालय में उपलब्ध अचार मॉड्यूल क्रमांकन (डंप () और डंप ()) और अक्रमांकन (लोड () और लोड ()) के लिए कार्य प्रदान करता है।
अचार मॉड्यूल बहुत ही पायथन विशिष्ट डेटा प्रारूप का उपयोग करता है। इसलिए, पाइथन में नहीं लिखे गए प्रोग्राम एन्कोडेड (मसालेदार) डेटा को ठीक से deserialize करने में सक्षम नहीं हो सकते हैं। साथ ही गैर-प्रमाणित स्रोत से डेटा को अनपिक करना सुरक्षित नहीं माना जाता है।
अचार प्रोटोकॉल
प्रोटोकॉल बाइनरी डेटा से/में पायथन ऑब्जेक्ट्स के निर्माण और डीकंस्ट्रक्टिंग में उपयोग किए जाने वाले सम्मेलन हैं। वर्तमान में अचार मॉड्यूल नीचे सूचीबद्ध 5 विभिन्न प्रोटोकॉल को परिभाषित करता है -
प्रोटोकॉल संस्करण 0 | मूल "मानव-पठनीय" प्रोटोकॉल पिछले संस्करणों के साथ संगत है। |
प्रोटोकॉल संस्करण 1 | पुराना बाइनरी प्रारूप भी पायथन के पुराने संस्करणों के साथ संगत है। |
प्रोटोकॉल संस्करण 2 | पायथन 2.3 में पेश किया गया नई शैली की कक्षाओं का कुशल अचार बनाना प्रदान करता है। |
प्रोटोकॉल संस्करण 3 | पायथन 3.0 में जोड़ा गया। जब अन्य पायथन 3 संस्करणों के साथ संगतता की आवश्यकता होती है, तो इसकी अनुशंसा की जाती है। |
प्रोटोकॉल संस्करण 4 | पायथन 3.4 में जोड़ा गया था। यह बहुत बड़ी वस्तुओं के लिए समर्थन जोड़ता है |
अपने पायथन इंस्टॉलेशन के उच्चतम और डिफ़ॉल्ट प्रोटोकॉल संस्करण को जानने के लिए अचार मॉड्यूल में परिभाषित निम्नलिखित स्थिरांक का उपयोग करें
>>> import pickle >>> pickle.HIGHEST_PROTOCOL 4 >>> pickle.DEFAULT_PROTOCOL 3
जैसा कि पहले उल्लेख किया गया है, अचार मॉड्यूल के डंप () और लोड () फ़ंक्शन पायथन डेटा को पिकलिंग और अनपिकलिंग करते हैं। डंप () फ़ंक्शन एक फ़ाइल में अचार वाली वस्तु लिखता है और लोड () फ़ंक्शन फ़ाइल से पायथन ऑब्जेक्ट में डेटा को अनपिक करता है।
निम्नलिखित प्रोग्राम एक डिक्शनरी ऑब्जेक्ट को बाइनरी फ़ाइल में अचार करता है।
import pickle f = open("data.txt","wb") dct = {"name":"Ravi", "age":23, "Gender":"M","marks":75} pickle.dump(dct,f) f.close()
जब उपरोक्त कोड निष्पादित किया जाता है, तो डिक्शनरी ऑब्जेक्ट का बाइट प्रतिनिधित्व data.txt फ़ाइल में संग्रहीत किया जाएगा।
बाइनरी फ़ाइल से डेटा को वापस डिक्शनरी में अनपिक या डिसेरिएलाइज़ करने के लिए, निम्न प्रोग्राम चलाएँ
import pickle f = open("data.txt","rb") d = pickle.load(f) print (d) f.close()
पायथन कंसोल फ़ाइल से पढ़ी गई डिक्शनरी ऑब्जेक्ट दिखाता है
{'age': 23, 'Gender': 'M', 'name': 'Ravi', 'marks': 75}
अचार मॉड्यूल में डंप () फ़ंक्शन भी होता है जो मसालेदार डेटा का एक स्ट्रिंग प्रतिनिधित्व देता है।
>>> from pickle import dump >>> dct = {"name":"Ravi", "age":23, "Gender":"M","marks":75} >>> dctstring = dumps(dct) >>> dctstring b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00Raviq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x06\x00\x00\x00Genderq\x04X\x01\x00\x00\x00Mq\x05X\x05\x00\x00\x00marksq\x06KKu.'
स्ट्रिंग को अनपिक करने और मूल डिक्शनरी ऑब्जेक्ट प्राप्त करने के लिए लोड () फ़ंक्शन का उपयोग करें।
>>> from pickle import load >>> dct = loads(dctstring) >>> dct {'name': 'Ravi', 'age': 23, 'Gender': 'M', 'marks': 75}
अचार मॉड्यूल पिकलर और अनपिकलर वर्गों को भी परिभाषित करता है। पिकर वर्ग फ़ाइल में अचार डेटा लिखता है। अनपिकलर वर्ग फ़ाइल से बाइनरी डेटा पढ़ता है और पायथन ऑब्जेक्ट का निर्माण करता है
पायथन ऑब्जेक्ट का अचार डेटा लिखने के लिए
from pickle import pickler f = open("data.txt","wb") dct = {'name': 'Ravi', 'age': 23, 'Gender': 'M', 'marks': 75} Pickler(f).dump(dct) f.close()
बाइनरी फ़ाइल को अनपिक करके डेटा वापस पढ़ने के लिए
from pickle import Unpickler f = open("data.txt","rb") dct = Unpickler(f).load() print (dct) f.close()
सभी पायथन मानक डेटा प्रकारों की वस्तुएं पिक करने योग्य हैं। इसके अलावा, कस्टम वर्ग की वस्तुओं को भी अचार और अनपिक किया जा सकता है।
from pickle import * class person: def __init__(self): self.name = "XYZ" self.age = 22 def show(self): print ("name:", self.name, "age:", self.age) p1 = person() f = open("data.txt","wb") dump(p1,f) f.close() print ("unpickled") f = open("data.txt","rb") p1 = load(f) p1.show()
पायथन पुस्तकालय में मार्शल मॉड्यूल भी है जिसका उपयोग पायथन वस्तुओं के आंतरिक क्रमांकन के लिए किया जाता है।