অবজেক্ট সিরিয়ালাইজেশন হ'ল ডেটা স্ট্রাকচার বা অবজেক্টের স্থিতিকে একটি ফর্ম্যাটে অনুবাদ করার প্রক্রিয়া যা কোনও ফাইলে সংরক্ষণ করা যেতে পারে বা সংক্রমণ করে পরে পুনর্গঠন করা যেতে পারে। এই টিউটোরিয়ালে, আপনি শিখবেন যে আপনি পাইথনের অবজেক্টগুলিকে সিরিয়ালাইজ করতে এবং ডিজাইরিয়াল করতে আচার বিল্ট-ইন মডিউলটি কীভাবে ব্যবহার করতে পারেন ।
পাইথন মধ্যে ধারাবাহিকতাতে প্রায়ই বলা হয় pickling । পিকলিং হ'ল প্রক্রিয়াটি যার মাধ্যমে পাইথন অবজেক্ট হায়ারার্কি একটি বাইট প্রবাহে রূপান্তরিত হয় এবং আনপিকলিং হল বিপরীত ক্রিয়াকলাপ।
সম্পর্কিত : কীভাবে পাইথনে ফাইলগুলি সংকোচন ও সঙ্কোচিত করা যায় ।
বেসিক পাইথন ডেটা স্ট্রাকচারগুলি বাছাই করে শুরু করা যাক:
import pickle
# define any Python data structure including lists, sets, tuples, dicts, etc.
l = list(range(10000))
আমি এখানে একটি তালিকা ব্যবহার করেছি যাতে কেবল প্রদর্শনের উদ্দেশ্যে 10000 উপাদান রয়েছে , আপনি যে কোনও পাইথন অবজেক্ট ব্যবহার করতে পারেন, নীচের কোডটি এই ফাইলটি একটি ফাইলে সংরক্ষণ করুন:
# save it to a file
with open("list.pickle", "wb") as file:
pickle.dump(l, file)
pickle.dump (obj, ফাইল) একটি জরা উপস্থাপনা লিখেছেন obj খোলা ফাইলে (এই ক্ষেত্রে, তালিকা) (লেখার এবং মোড বাইট "WB" ), আবার লোড এই বস্তুর যাক:
# load it again
with open("list.pickle", "rb") as file:
unpickled_l = pickle.load(file)
আসল এবং আনপিক্লিকড অবজেক্টের তুলনা করে পিকল.লোড (ফাইল) কোনও ফাইলে থাকা আচারের ডেটা (পঠিত এবং বাইটস মোডে "আরবি" খোলা হয় ) থেকে কোনও অবজেক্ট পড়ে এবং রিটার্ন দেয় :
print("unpickled_l == l: ", unpickled_l == l)
print("unpickled l is l: ", unpickled_l is l)
আউটপুট:
unpickled_l == l: True
unpickled l is l: False
উপলব্ধি করা যায়, তালিকার মানগুলি এখনও একই (সমান), তবে এটি অভিন্ন নয়, অন্য কথায়, আনকলিকৃত তালিকার স্মৃতিতে অন্য একটি জায়গা রয়েছে, সুতরাং এটি আক্ষরিক অর্থে মূল বস্তুর অনুলিপি।
আপনি ব্যবহারকারীর সংজ্ঞায়িত ক্লাসগুলির অবজেক্টের দৃষ্টান্তগুলি সংরক্ষণ এবং লোড করতে পারেন। উদাহরণস্বরূপ, আসুন একটি সাধারণ ব্যক্তি শ্রেণি সংজ্ঞা দিন :
class Person:
def __init__(self, first_name, last_name, age, gender):
self.first_name = first_name
self.last_name = last_name
self.age = age
self.gender = gender
def __str__(self):
return f"{self.first_name} {self.last_name}, age={self.age}, gender={self.gender}>"
p = Person("John", "Doe", 99, "Male")
আবার একই প্রক্রিয়া করা যাক:
# save the object
with open("person.pickle", "wb") as file:
pickle.dump(p, file)
# load the object
with open("person.pickle", "rb") as file:
p2 = pickle.load(file)
print(p)
print(p2)
এই ফলাফলগুলি:
<Person name=John Doe, age=99, gender=Male>
<Person name=John Doe, age=99, gender=Male>
সাধারণভাবে, আপনি যদি কোনও ব্যবহারকারীর সংজ্ঞায়িত নির্দিষ্ট অবজেক্টটি আনসাতে চান তবে আপনার বর্তমান শ্রেণিতে এটির শ্রেণি প্রয়োগ করতে হবে, অন্যথায় এটি একটি ত্রুটি বাড়িয়ে তুলবে।
উদাহরণস্বরূপ, আপনি যদি কোনও নিম্পি অ্যারে (বা আপনার দ্বারা ইনস্টল করা মডিউলগুলির মধ্যে থাকা অন্য কোনও সংজ্ঞায়িত অবজেক্টগুলি) ছাঁটাই করেন তবে পাইথন স্বয়ংক্রিয়ভাবে নমপি মডিউল আমদানি করবে এবং আপনার জন্য বস্তুটি লোড করবে।
আপনি পিকেল.ডাম্পস (অবজেক্ট) ফাংশনটিও ব্যবহার করতে পারেন যা বস্তুর আচারযুক্ত প্রতিনিধিত্বকে বাইটস বস্তু হিসাবে ফিরিয়ে দেয়, তাই আপনি এটি এনক্রিপ্ট করতে পারেন , এটি স্থানান্তর করতে পারেন বা যাই হোক না কেন। নীচের কোডগুলি পিকেল.ডাম্পস ( অবজেক্ট ) এবং পিকেল.লোডগুলি (ডেটা) ফাংশনগুলি ব্যবহার করে পূর্ববর্তী অবজেক্টটিকে আনপিক করে তোলে :
# get the dumped bytes
dumped_p = pickle.dumps(p)
print(dumped_p)
# write them to a file
with open("person.pickle", "wb") as file:
file.write(dumped_p)
# load it
with open("person.pickle", "rb") as file:
p2 = pickle.loads(file.read())
এই বিষয়টির বাইটস উপস্থাপনাটি একবার দেখুন:
b'\x80\x03c__main__\nPerson\nq\x00)\x81q\x01}q\x02(X\n\x00\x00\x00first_nameq\x03X\x04\x00\x00\x00Johnq\x04X\t\x00\x00\x00last_nameq\x05X\x03\x00\x00\x00Doeq\x06X\x03\x00\x00\x00ageq\x07KcX\x06\x00\x00\x00genderq\x08X\x04\x00\x00\x00Maleq\tub.'
হ্যাঁ, এটি সঠিক, মানব পাঠযোগ্য নয়, কারণ এটি বাইনারি বিন্যাসে রয়েছে।
অবশেষে, আপনি যে জিনিসগুলিকে আচার এবং আনপিক করতে পারেন তার তালিকা এখানে রয়েছে:
- কিছুই না ।
- বুলিয়ান ভেরিয়েবল ( সত্য এবং মিথ্যা )।
- পূর্ণসংখ্যা, ভাসমান পয়েন্ট সংখ্যা এবং জটিল সংখ্যা।
- স্ট্রিং, বাইট, বাইটারি।
- টিপলস, তালিকা, সেট এবং অভিধানে কেবল বাছাইযোগ্য অবজেক্ট রয়েছে objects
- একটি মডিউল শীর্ষ স্তরে সংজ্ঞায়িত ফাংশন ( ডিএফ ব্যবহার করে , ল্যাম্বডা নয় )।
- মডিউলের শীর্ষ স্তরে (যেমন সর্বোচ্চ , মিনিট , বুল ইত্যাদি) সংজ্ঞায়িত অন্তর্নির্মিত ফাংশন ।
- ক্লাসগুলি যা মডিউলের শীর্ষ স্তরে সংজ্ঞায়িত করা হয়।
- None.
- Boolean variables (True and False).
- Integers, floating point numbers and complex numbers.
- Strings, bytes, bytearrays.
- Tuples, lists, sets and dictionaries containing only pickleable objects.
- Functions defined at the top level of a module (using def, not lambda).
- Built-in functions defined at the top level of a module (such as max, min, bool, etc.).
- Classes that are defined at the top level of a module.
Code for How to Use Pickle for Object Serialization in Python
You can also view the full code on github.
save_data_structures.py
import pickle
# define any Python data structure including lists, sets, tuples, dicts, etc.
l = list(range(10000))
# save it to a file
with open("list.pickle", "wb") as file:
pickle.dump(l, file)
# load it again
with open("list.pickle", "rb") as file:
unpickled_l = pickle.load(file)
print("unpickled_l == l: ", unpickled_l == l)
print("unpickled l is l: ", unpickled_l is l)
save_defined_objects.py
import pickle
class Person:
def __init__(self, first_name, last_name, age, gender):
self.first_name = first_name
self.last_name = last_name
self.age = age
self.gender = gender
def __str__(self):
return f"{self.first_name} {self.last_name}, age={self.age}, gender={self.gender}>"
p = Person("John", "Doe", 99, "Male")
# save the object
with open("person.pickle", "wb") as file:
pickle.dump(p, file)
# load the object
with open("person.pickle", "rb") as file:
p2 = pickle.load(file)
print(p)
print(p2)
save_dumps.py
import pickle
class Person:
def __init__(self, first_name, last_name, age, gender):
self.first_name = first_name
self.last_name = last_name
self.age = age
self.gender = gender
def __str__(self):
return f"{self.first_name} {self.last_name}, age={self.age}, gender={self.gender}>"
p = Person("John", "Doe", 99, "Male")
# get the dumped bytes
dumped_p = pickle.dumps(p)
print(dumped_p)
# write them to a file
with open("person.pickle", "wb") as file:
file.write(dumped_p)
# load it
with open("person.pickle", "rb") as file:
p2 = pickle.loads(file.read())
print(p)
print(p2)
0 comments:
Post a Comment