Python लाइब्रेरी में struct मॉड्यूल के प्रावधान C प्रकार के स्ट्रक्स और Python बाइट्स ऑब्जेक्ट के बीच रूपांतरण करने में उपयोगी हैं। इसे मॉड्यूल स्तर के फ़ंक्शन के साथ-साथ Struct क्लास और उसके मेथड द्वारा प्राप्त किया जा सकता है जैसा कि struct मॉड्यूल में परिभाषित किया गया है।
रूपांतरण फ़ंक्शन एक फॉर्मेट स्ट्रिंग का उपयोग करते हैं। फॉर्मेट स्ट्रिंग में उपयोग किए जाने वाले बाइट ऑर्डर, आकार, और अलाइनमेंट को निम्न तालिका के अनुसार फॉर्मेटिंग वर्ण द्वारा निर्धारित किया जाता है
| वर्ण | बाइट ऑर्डर | आकार | अलाइनमेंट |
|---|---|---|---|
| @ | नेटिव | नेटिव | नेटिव |
| = | नेटिव | मानक | कोई नहीं |
| < | लिटिल-एंडियन | मानक | कोई नहीं |
| > | बिग-एंडियन | मानक | कोई नहीं |
| ! | नेटवर्क (= बिग-एंडियन) | मानक | कोई नहीं |
निम्न तालिका C प्रकार के वेरिएबल को दर्शाने के लिए उपयोग किए जाने वाले फॉर्मेट वर्ण और संबंधित Python प्रकार दिखाती है।
| फॉर्मेट | C प्रकार | Python प्रकार |
|---|---|---|
| x | पैड बाइट | कोई मान नहीं |
| c | चार | लंबाई 1 के बाइट्स |
| b/B | हस्ताक्षरित/अहस्ताक्षरित चार | पूर्णांक |
| ? | _Bool | बूल |
| h/H | शॉर्ट/अहस्ताक्षरित शॉर्ट | पूर्णांक |
| i/I | इंट/अहस्ताक्षरित इंट | पूर्णांक |
| l/L | लॉन्ग/अहस्ताक्षरित लॉन्ग | पूर्णांक |
| f | फ्लोट | फ्लोट |
| d | डबल | फ्लोट |
| s | चार[] | बाइट्स |
| p | चार[] | बाइट्स |
| P | वॉइड * | पूर्णांक |
struct मॉड्यूल में निम्नलिखित फ़ंक्शन परिभाषित हैं
pack()
यह फ़ंक्शन फॉर्मेट स्ट्रिंग फॉर्मेट के अनुसार मानों को पैक करके एक बाइट्स ऑब्जेक्ट लौटाता है। फॉर्मेटिंग वर्णों को फॉर्मेट द्वारा आवश्यक मानों से मेल खाना चाहिए।
unpack()
यह फ़ंक्शन फॉर्मेट स्ट्रिंग फॉर्मेट के अनुसार बफ़र से अनपैक करता है। परिणाम एक टपल है भले ही इसमें ठीक एक आइटम हो।
निम्नलिखित कोड इन फ़ंक्शन के उपयोग को दर्शाता है।
import struct
student = (1, b'Rahul', 65.75)
packed = struct.pack('I 5s f', *student)
print('packed data:', packed)
unpacked = struct.unpack('I 5s f', packed)
print('unpacked data:', unpacked)
आउटपुट
packed data: b'\x01\x00\x00\x00Rahul\x00\x00\x00\x00\x80\x83B' unpacked data: (1, b'Rahul', 65.75)
पैकिंग/अनपैकिंग Struct क्लास में मेथड का उपयोग करके भी प्राप्त किया जा सकता है। एक Struct ऑब्जेक्ट एक बार बनाकर उसके मेथड को कॉल करना समान फॉर्मेट के साथ struct फ़ंक्शन को कॉल करने की तुलना में अधिक कुशल है क्योंकि फॉर्मेट स्ट्रिंग को केवल एक बार संकलित करने की आवश्यकता होती है।
Struct(format)
यह कंस्ट्रक्टर एक नया Struct ऑब्जेक्ट लौटाता है जो फॉर्मेट स्ट्रिंग फॉर्मेट के अनुसार बाइनरी डेटा लिखता और पढ़ता है।
pack()
यह मेथड संकलित फॉर्मेट का उपयोग करके pack() फ़ंक्शन के समान है।
unpack()
यह मेथड संकलित फॉर्मेट का उपयोग करके unpack() फ़ंक्शन के समान है।
निम्नलिखित उदाहरण दिखाता है कि Struct क्लास का उपयोग Python डेटा को पैक और अनपैक करने के लिए कैसे किया जाता है।
s = struct.Struct('I 5s f')
packed = s.pack(*student)
print(packed)
unpacked = s.unpack(packed)
print(unpacked)
पैक्ड डेटा को सीधे नेम्ड टपल ऑब्जेक्ट में पार्स किया जा सकता है।
from collections import namedtuple
newstudent = namedtuple('newstudent', 'No Name Marks')
s1 = newstudent._make(struct.unpack('I 5s f', packed))
print(s1)
आउटपुट
newstudent(No=1, Name=b'Rahul', Marks=65.75)