Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python ऑब्जेक्ट सीरियलाइज़ेशन


सीरियलाइज़ेशन एक प्रक्रिया है जिसमें एक ऑब्जेक्ट को एक ऐसे प्रारूप में बदल दिया जाता है जिसे संग्रहीत/सेव किया जा सकता है (फ़ाइल या मेमोरी बफ़र में), ताकि हम इसे बाद में डीसीरियलाइज़ कर सकें और सीरियलाइज़्ड प्रारूप से मूल सामग्री/ऑब्जेक्ट को पुनर्प्राप्त कर सकें। हम इन सभी कार्यों को करने के लिए 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 ऑब्जेक्ट डेटा संरचना में बदल देती है।


  1. पायथन ऑब्जेक्ट तुलना:  is  बनाम  == पायथन ऑब्जेक्ट तुलना: "is" बनाम "=="

    इस लेख में हम ऑब्जेक्ट तुलना यानी is ऑपरेटर और समानता ऑपरेटर == के बीच अंतर के बारे में जानेंगे। समानता ऑपरेटर पास किए गए आर्गुमेंट के मान पर काम करता है जबकि is ऑपरेटर पास किए गए दो ऑब्जेक्ट्स के रेफरेंस की तुलना करता है। समानता ऑपरेटर के मामले में आर्गुमेंट की सामग्री की तुलना की जाती है, उनके रेफ

  1. - Python में ऑब्जेक्ट को कैसे नष्ट करें?

    एक क्लास स्पेशल मेथड __del__() को लागू करती है, जिसे डिस्ट्रक्टर कहा जाता है, जिसे तब इनवोक किया जाता है जब इंस्टेंस नष्ट होने वाला होता है। यह मेथड किसी इंस्टेंस द्वारा उपयोग किए जाने वाले नॉन-मेमोरी रिसोर्सेज को साफ करने के लिए उपयोग किया जा सकता है। उदाहरण यह __del__() डिस्ट्रक्टर उस इंस्टेंस का

  1. - पायथन में टाइमटपल क्या है?

    datetime.date इंस्टेंसेज का timetuple() मेथड time.struct_time टाइप का ऑब्जेक्ट लौटाता है। struct_time एक नेम्ड टपल ऑब्जेक्ट है (एक नेम्ड टपल ऑब्जेक्ट में एट्रिब्यूट्स होते हैं जिन्हें इंडेक्स या नाम से एक्सेस किया जा सकता है)। struct_time ऑब्जेक्ट में डेट और टाइम फील्ड्स दोनों को दर्शाने के लिए एट