क्रमांकन एक प्रक्रिया है जिसमें एक वस्तु को एक प्रारूप में बदल दिया जाता है जिसे संग्रहीत / सहेजा जा सकता है (एक फ़ाइल या मेमोरी बफर में), इसलिए हम इसे बाद में deserialize करने और मूल सामग्री / वस्तु को क्रमबद्ध प्रारूप से पुनर्प्राप्त करने में सक्षम हैं। हम इन सभी कार्यों को करने के लिए एक अजगर अचार मॉड्यूल का उपयोग करने जा रहे हैं।
अचार क्या है?
पायथन अचार मॉड्यूल का उपयोग अजगर वस्तु संरचनाओं को क्रमबद्ध और डी-क्रमबद्ध करने के लिए किया जाता है। किसी भी प्रकार की अजगर वस्तुओं (सूची, तानाशाही, आदि) को बाइट स्ट्रीम (0s और 1s) में परिवर्तित करने की प्रक्रिया को अचार बनाना या क्रमांकन या फ़्लैटनिंग या मार्शलिंग कहा जाता है। हम अनपिकलिंग नामक प्रक्रिया द्वारा बाइट स्ट्रीम (पिकलिंग के माध्यम से उत्पन्न) को वापस पायथन ऑब्जेक्ट्स में परिवर्तित कर सकते हैं।
किसी वस्तु को चुनने के लिए हमें बस -
. की आवश्यकता होती है- अचार आयात करें
- डंप () फ़ंक्शन को कॉल करें
import pickle class Vehicle: def __init__(self, number_of_doors, color): self.number_of_doors = number_of_doors self.color = color class Car(Vehicle): def __init__(self, color): Vehicle.__init__(self, 5, color) Maruti = Car('Red') print(str.format('My Vehicle Maruti is {0} and has {1} doors', Maruti.color, Maruti.number_of_doors)) pickle_Maruti = pickle.dumps(Maruti) print('Here is my pickled Vehicle: ') print(pickle_Maruti)
आउटपुट
My Vehicle Maruti is Red and has 5 doors Here is my pickled Vehicle: b'\x80\x03c__main__\nCar\nq\x00)\x81q\x01}q\x02(X\x0f\x00\x00\x00number_of_doorsq\x03K\x05X\x05\x00\x00\x00colorq\x04X\x03\x00\x00\x00Redq\x05ub.'
उपरोक्त उदाहरण में, हमने कार वर्ग का एक उदाहरण बनाया है और फिर हमने इसे चुना है, अपनी कार के उदाहरण को बाइट्स की एक साधारण सरणी में बदल दिया है। हमारे कार इंस्टेंस को चुनने के बाद, हम इसे आसानी से बाइनरी फ़ाइल या डीबी फ़ील्ड में स्टोर कर सकते हैं और बाद में ऑब्जेक्ट पदानुक्रम में बाइट्स के इस समूह को वापस बदलने के लिए इसे पुनर्स्थापित कर सकते हैं।
नोट:यदि हम अचार वाली वस्तु के साथ एक फ़ाइल बनाना चाहते हैं, तो हमें डंप () विधि के बजाय डंप () विधि का उपयोग करने की आवश्यकता है।
अनपिकलिंग
यह उलटा (या अचार बनाना) ऑपरेशन है, जहां हम बाइनरी स्ट्रीम लेते हैं और इसे ऑब्जेक्ट पदानुक्रम में परिवर्तित करते हैं।
अचार मॉड्यूल के लोड () फ़ंक्शन का उपयोग करके अनपिकलिंग किया जाता है और बाइट स्ट्रीम से एक पूर्ण ऑब्जेक्ट पदानुक्रम वापस लौटाता है।
नीचे लोड है
import pickle class Vehicle: def __init__(self, number_of_doors, color): self.number_of_doors = number_of_doors self.color = color class Car(Vehicle): def __init__(self, color): Vehicle.__init__(self, 5, color) Maruti = Car('Red') print(str.format('My Vehicle Maruti is {0} and has {1} doors', Maruti.color, Maruti.number_of_doors)) pickle_Maruti = pickle.dumps(Maruti) #Now, let's unpickle our car Maruti creating another instance, another car ... unpickle_Maruti Hyundai = pickle.loads(pickle_Maruti) #Set another color of our new instance Hyundai.color = 'Black' print(str.format("Hyundai is {0} ", Hyundai.color)) print(str.format("Maruti is {0} ", Maruti.color))
ऊपर के उदाहरण में, आप देख सकते हैं कि हमने अपनी पहली कार ऑब्जेक्ट (मारुति) को चुना है और फिर हमने इसे दूसरे वेरिएबल (हुंडई) में अनपिक किया है और इसलिए हमारे पास एक अर्थ में - हुंडई बनाने के लिए मारुति को क्लोन किया गया है।
आउटपुट
My Vehicle Maruti is Red and has 5 doors Hyundai is Black Maruti is Red
अचार बनाम JSON
JSON जावास्क्रिप्ट ऑब्जेक्ट नोटेशन के लिए खड़ा है, डेटा-इंटरचेंज के लिए एक हल्का प्रारूप है और मानव पठनीय है। अचार पर JSON का एक बड़ा लाभ यह है कि यह मानकीकृत और भाषा-स्वतंत्र है। यह अचार से कहीं ज्यादा सुरक्षित और तेज है।
अचार का एक और विकल्प cPickle है, जो काफी हद तक अचार की तरह होता है लेकिन C भाषा में लिखा जाता है और 1000 गुना तेज होता है। आप अचार और cPickle के लिए एक ही फाइल का उपयोग कर सकते हैं।
import json mylist = [2, 4, 5, "ab", "cd", "ef"] print("Here is my list: ", mylist) json_string = json.dumps(mylist ) print("Here is my json encoded object: ", json_string) print ("Here is JSON back to a data structure: ",json.loads(json_string))
आउटपुट
Here is my list: [2, 4, 5, 'ab', 'cd', 'ef'] Here is my json encoded object: [2, 4, 5, "ab", "cd", "ef"] Here is JSON back to a data structure: [2, 4, 5, 'ab', 'cd', 'ef']
उपरोक्त कोड में, हम पहले ऑब्जेक्ट (मेरी सूची) लेते हैं और स्ट्रिंग को वापस करने के लिए "डंप" विधि का उपयोग करते हैं और फिर JSON को डेटा संरचना में वापस लोड करने के लिए हम "लोड" विधि का उपयोग करते हैं जो एक स्ट्रिंग को बदल देता है और इसे बदल देता है JSON ऑब्जेक्ट डेटा संरचना।