কম্পিউটার

অভ্যন্তরীণ পাইথন অবজেক্ট সিরিয়ালাইজেশন (মার্শাল)


যদিও পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতে মার্শাল মডিউল অবজেক্ট সিরিয়ালাইজেশন বৈশিষ্ট্য (আচার মডিউলের মতো) প্রদান করে, এটি সাধারণ উদ্দেশ্যের ডেটা স্থিরতা বা সকেট ইত্যাদির মাধ্যমে পাইথন অবজেক্টের সংক্রমণের জন্য সত্যিই কার্যকর নয়। পাইথন মডিউল (.pyc ফাইল) এর সংকলিত সংস্করণে অপারেশন লিখুন। মার্শাল মডিউল দ্বারা ব্যবহৃত ডেটা বিন্যাসটি পাইথন সংস্করণ জুড়ে সামঞ্জস্যপূর্ণ নয় (এমনকি সাবভার্সনও নয়)। সেই কারণে একটি সংস্করণের একটি সংকলিত পাইথন স্ক্রিপ্ট (.pyc ফাইল) সম্ভবত অন্য সংস্করণে কার্যকর হবে না। মার্শাল মডিউলটি এইভাবে পাইথনের অভ্যন্তরীণ অবজেক্ট সিরিয়ালাইজেশনের জন্য ব্যবহৃত হয়।

পিকেল মডিউলের মতো, মার্শাল মডিউল লোড() এবং ডাম্প() ফাংশনগুলিকে ফাইল থেকে/তে মার্শালড অবজেক্ট পড়ার এবং লেখার জন্য সংজ্ঞায়িত করে। এছাড়াও, loads() এবং dumps() ফাংশন মার্শাল অবজেক্টের একটি স্ট্রিং উপস্থাপনা নিয়ে কাজ করে।

ডাম্পস() − একটি বস্তুর মতো একটি বাইট ফেরত দেয় যা আমার একটি পাইথন বস্তুকে মার্শালিং করে। শুধুমাত্র স্ট্যান্ডার্ড ডেটা টাইপের বস্তুগুলি মার্শালিং এর জন্য সমর্থিত। অসমর্থিত প্রকারগুলি ValueError ব্যতিক্রম বাড়ায়৷

লোড() − এই ফাংশনটি বাইটকে বস্তুর মতো পাইথন বস্তুতে রূপান্তর করে। যদি রূপান্তরের ফলে বৈধ পাইথন বস্তু না হয়, তাহলে ValueError বা TypeError উত্থাপিত হতে পারে।

নিম্নলিখিত কোড ডাম্পস() ব্যবহার করে মার্শাল করা একটি পাইথন অভিধান বস্তু দেখায়। loads() ফাংশন দ্বারা বাইট উপস্থাপনা আবার অভিধানে রূপান্তরিত হয়।

import marshal
person = {"name":"xyz", "age":22, "marks":[45,56,78]}
data = marshal.dumps(person)
obj = marshal.loads(data)
print (obj)

ডাম্প() − এই ফাংশনটি একটি ফাইলে সমর্থিত পাইথন অবজেক্টের বাইট উপস্থাপনা লেখে। ফাইলটি নিজেই লেখার অনুমতি সহ একটি বাইনারি ফাইল হবে

লোড() − এই ফাংশনটি একটি বাইনারি ফাইল থেকে বাইট ডেটা পড়ে এবং এটিকে পাইথন অবজেক্টে রূপান্তর করে৷

উপরে উল্লিখিত মার্শাল মডিউলটি .pyc ফাইলগুলি প্রক্রিয়া করতে ব্যবহৃত হয়। নিম্নলিখিত উদাহরণটি পাইথনের কোড অবজেক্টগুলি পরিচালনা করার জন্য ডাম্প() এবং লোড() ফাংশনগুলির ব্যবহার প্রদর্শন করে, যেগুলি পূর্বে সংকলিত পাইথন মডিউলগুলি সংরক্ষণ করতে ব্যবহৃত হয়৷

কোডটি একটি উৎস স্ট্রিং থেকে একটি কোড অবজেক্ট তৈরি করতে বিল্ট-ইন কম্পাইল() ফাংশন ব্যবহার করে যা পাইথন নির্দেশাবলী এম্বেড করে।

compile(source, file, mode)

ফাইলের প্যারামিটারটি সেই ফাইল হওয়া উচিত যেখান থেকে কোডটি পড়া হয়েছে। যদি এটি কোনো ফাইল থেকে পড়া না হয় তাহলে কোনো নির্বিচারে স্ট্রিং পাস করুন।

মোড প্যারামিটার হল 'exec' যদি উৎসে বিবৃতির একটি ক্রম থাকে, 'eval' যদি একটি একক অভিব্যক্তি থাকে বা 'single' থাকে যদি এটি একটি একক ইন্টারেক্টিভ স্টেটমেন্ট থাকে।

কম্পাইল কোড অবজেক্ট তারপর ডাম্প() ফাংশন

ব্যবহার করে একটি .pyc ফাইলে সংরক্ষণ করা হয়
import marshal
script = """
a = 10
b = 20
print ('addition = ',a+b)
"""
code = compile(script, "script", "exec")
f = open("a.pyc","wb")
marshal.dump(code, f)
f.close()

.pyc ফাইল থেকে অবজেক্ট ডিসিরিয়ালাইজ করতে load() ফাংশন ব্যবহার করুন। যেহেতু এটি একটি কোড অবজেক্ট রিটার্ন করে, এটি exec(), আরেকটি বিল্ট-ইন ফাংশন ব্যবহার করে চালানো যেতে পারে।

import marshal
f = open("a.pyc","rb")
data = marshal.load(f)
exec (data)

আউটপুট উৎস স্ট্রিং এ এমবেড করা কোড ব্লকের ফলাফল হবে

addition = 30

  1. পাইথন অবজেক্ট তুলনা "হ্যাঁ" বনাম "=="

  2. পাইথনে সেটের অভ্যন্তরীণ কাজ

  3. পাইথনের অভ্যন্তরীণ কাজ

  4. পাইথনে তালিকার অভ্যন্তরীণ কাজ