सीरियलाइज़ेशन एक प्रक्रिया है जिसमें एक ऑब्जेक्ट को एक ऐसे प्रारूप में बदल दिया जाता है जिसे संग्रहीत/सेव किया जा सकता है (फ़ाइल या मेमोरी बफ़र में), ताकि हम इसे बाद में डीसीरियलाइज़ कर सकें और सीरियलाइज़्ड प्रारूप से मूल सामग्री/ऑब्जेक्ट को पुनर्प्राप्त कर सकें। हम इन सभी कार्यों को करने के लिए Python pickle मॉड्यूल का उपयोग करने जा रहे हैं।
पिकलिंग क्या है?
Python pickle मॉड्यूल का उपयोग Python ऑब्जेक्ट संरचनाओं को सीरियलाइज़ और डी-सीरियलाइज़ करने के लिए किया जाता है। किसी भी प्रकार के Python ऑब्जेक्ट (सूची, डिक्शनरी, आदि) को बाइट स्ट्रीम (0 और 1) में बदलने की प्रक्रिया को पिकलिंग या सीरियलाइज़ेशन या फ्लैटनिंग या मार्शलिंग कहा जाता है। हम पिकलिंग के माध्यम से उत्पन्न बाइट स्ट्रीम को अनपिकलिंग नामक प्रक्रिया द्वारा वापस Python ऑब्जेक्ट में बदल सकते हैं।
एक ऑब्जेक्ट को पिकल करने के लिए हमें बस इतना करना है -
- pickle आयात करें
- dumps() फ़ंक्शन को कॉल करें
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.'
उपरोक्त उदाहरण में, हमने Car क्लास का एक उदाहरण बनाया और फिर हमने इसे पिकल किया, हमारे कार उदाहरण को बाइट्स की एक साधारण सरणी में बदल दिया। हमारी कार उदाहरण पिकल होने के बाद, हम इसे आसानी से बाइनरी फ़ाइल पर या डीबी फ़ील्ड में संग्रहीत कर सकते हैं और बाद में इसे इस बाइट्स के समूह को ऑब्जेक्ट पदानुक्रम में वापस बदलने के लिए पुनर्स्थापित कर सकते हैं।
नोट: यदि हम पिकल्ड ऑब्जेक्ट के साथ एक फ़ाइल बनाना चाहते हैं, तो हमें dumps() विधि के बजाय dump() विधि का उपयोग करने की आवश्यकता है।
अनपिकलिंग
यह पिकलिंग का व्युत्क्रम (या विपरीत) ऑपरेशन है, जहां हम बाइनरी स्ट्रीम लेते हैं और इसे ऑब्जेक्ट पदानुक्रम में बदल देते हैं।
अनपिकलिंग pickle मॉड्यूल के load() फ़ंक्शन का उपयोग करके किया जाता है और बाइट स्ट्रीम से एक पूर्ण ऑब्जेक्ट पदानुक्रम लौटाता है।
नीचे load है
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)
# अब, आइए अपनी कार Maruti को अनपिकल करके एक और उदाहरण बनाएं, एक और कार ...
unpickle_Maruti
Hyundai = pickle.loads(pickle_Maruti)
# हमारे नए उदाहरण Hyundai का दूसरा रंग सेट करें
Hyundai.color = 'Black'
print(str.format("Hyundai is {0} ", Hyundai.color))
print(str.format("Maruti is {0} ", Maruti.color))
उपरोक्त उदाहरण में, आप देख सकते हैं कि हमने अपनी पहली कार ऑब्जेक्ट (Maruti) को पिकल किया है और फिर हमने इसे दूसरे वेरिएबल (Hyundai) में अनपिकल किया है और इसलिए हमारे पास एक अर्थ में - Maruti को क्लोन करके Hyundai बनाया है।
आउटपुट
My Vehicle Maruti is Red and has 5 doors Hyundai is Black Maruti is Red
Pickle बनाम JSON
JSON का मतलब JavaScript Object Notation है, डेटा-इंटरचेंज के लिए एक हल्का प्रारूप है और मानव-पठनीय है। Pickle पर JSON के बड़े फायदों में से एक यह है कि यह मानकीकृत और भाषा-स्वतंत्र है। यह pickle की तुलना में अधिक सुरक्षित और तेज़ है।
Pickle का एक और विकल्प cPickle है, जो pickle की तरह ही है लेकिन C भाषा में लिखा गया है और 1000 गुना तेज़ है। आप pickle और 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']
उपरोक्त कोड में, हम पहले ऑब्जेक्ट (मेरी सूची) लेते हैं और स्ट्रिंग लौटाने के लिए "dumps" विधि का उपयोग करते हैं और फिर JSON को डेटा संरचना में वापस लोड करने के लिए हम "loads" विधि का उपयोग करते हैं जो एक स्ट्रिंग लेती है और इसे JSON ऑब्जेक्ट डेटा संरचना में बदल देती है।