ویدیو آموزش سریالایز کردن آبجکت ها با ماژول pickle در پایتون

امیرحسین بیگدلو April 2023

بعنوان یک توسعه دهنده ، ممکن است شما نیاز داشته باشید که یک آبجکت پیچیده را از طریق شبکه بفرستید یا وضعیت داخلی آبجکت‌های خود را برای استفاده بعدی در دیسک یا دیتابیس ذخیره کنید. برای تحقق این امر می توانید از فرایندی به نام سریالایز کردن(serialization) استفاده کنید که به لطف ماژول pickle پایتون به طور کامل توسط کتابخانه استاندارد پشتیبانی می شود.

 

فرایند serialization روشی برای تبدیل ساختار داده به فرم خطی است که می تواند از طریق شبکه ذخیره یا منتقل شود. به روند معکوس، که یک فرم خطی را می گیرد و آنرا دوباره به آبجکت تبدیل می کند را deserialization میگویند. serialization در بسیاری از موقعیت های مختلف قابل استفاده است. یکی از رایج ترین استفاده ها صرفه جویی در وضعیت شبکه عصبی بعد از مرحله آموزش است تا بتوانید بعداً از آن استفاده کنید بدون اینکه مجدداً تمرین را دوباره انجام دهید.

 

 

 #  آشنایی با ماژول pickle پایتون

ماژول pickle پایتون اساساً از چهار متد تشکیل شده است:

pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)

pickle.dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None)

pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)

pickle.loads(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)

دو روش اول در طی فرآیند pickling استفاده می شود و دو روش دیگر در حین unpickling. تنها تفاوت بین dump() و dumps() در این است که اولی فایلی را ایجاد می کند که حاوی نتیجه serialization است ، در حالی که دوم یک string را برمی گرداند.

 

در مثال زیر میبینید که چطور با استفاده از ماژول pickle میتوان یک کلاس را serialize کرد و یک رشته ساده را دریافت کرد. بعد از انتخاب کلاس ، می توانید مقدار ویژگیهای آن را بدون تأثیرگذاری روی رشته pickle تغییر دهید. سپس می توانید رشته pickle را در یک متغیر دیگر جدا کنید و یک نسخه دقیق از کلاس pickle قبلی را داشته باشید.

# pickling.py
import pickle

class example_class:
    a_number = 35
    a_string = "hey"
    a_list = [1, 2, 3]
    a_dict = {"first": "a", "second": 2, "third": [1, 2, 3]}
    a_tuple = (22, 23)

my_object = example_class()

my_pickled_object = pickle.dumps(my_object)  # Pickling the object
print(f"This is my pickled object:\n{my_pickled_object}\n")

my_object.a_dict = None

my_unpickled_object = pickle.loads(my_pickled_object)  # Unpickling the object
print(f"This is a_dict of the unpickled object:\n{my_unpickled_object.a_dict}\n")

 

در مثال بالا چندین آبجکت مختلف ایجاد می کنید و با pickle آنها را serialize می کنید. و نتیجه به شکل زیر خواهد بود:

$ python pickling.py
This is my pickled object:
b'\x80\x03c__main__\nexample_class\nq\x00)\x81q\x01.'

This is a_dict of the unpickled object:
{'first': 'a', 'second': 2, 'third': [1, 2, 3]}

 

ویدیوهای مشابه



ماژول heapq پایتون
امیرحسین بیگدلو

ارسال نظر


aryo

1 سال قبل پاسخ به نظر

خوب بود

ارسال نظر



anonymous

3 سال قبل پاسخ به نظر

خیلیییییییی عالی بود.
بلد نبودم ولی یادگرفتم.
مرسی

ارسال نظر



jj

3 سال قبل پاسخ به نظر

ممنون بخاطر آموزشتون
ویدیو عالی بود توضیحات متنی هم خوب بودن

ارسال نظر



محمد

3 سال قبل پاسخ به نظر

خیلی عالی بود، نکات کلیدی رو بسیار خوب توضیح دادین

ارسال نظر



مونگارد