بعنوان یک توسعه دهنده ، ممکن است شما نیاز داشته باشید که یک آبجکت پیچیده را از طریق شبکه بفرستید یا وضعیت داخلی آبجکتهای خود را برای استفاده بعدی در دیسک یا دیتابیس ذخیره کنید. برای تحقق این امر می توانید از فرایندی به نام serialization استفاده کنید که به لطف ماژول pickle پایتون به طور کامل توسط کتابخانه استاندارد پشتیبانی می شود.
در زبان انگلیسی pickle به معنی ترشی میباشد.
فرایند serialization روشی برای تبدیل ساختار داده به فرم خطی است که می تواند از طریق شبکه ذخیره یا منتقل شود. به روند معکوس، که یک فرم خطی را می گیرد و آنرا دوباره به آبجکت تبدیل می کند را deserialization میگویند. serialization در بسیاری از موقعیت های مختلف قابل استفاده است. یکی از رایج ترین استفاده ها صرفه جویی در وضعیت شبکه عصبی بعد از مرحله آموزش است تا بتوانید بعداً از آن استفاده کنید بدون اینکه مجدداً تمرین را دوباره انجام دهید.
ماژول 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]}
اگر دوست دارید همین مبحث رو به شکل ویدیویی ببینید به لینک زیر سر بزنید:
https://www.mongard.ir/one_part/96/python-pickle-module/