جعفر اسمعیلی
جعفر اسمعیلی
خواندن ۴ دقیقه·۱ سال پیش

سریالایزشن در پایتون - Python Serialization


در واقع Serialization یک فرآیند برای تبدیل شی داده مانند object پایتون یا مدل های پایتون تنسورفلو به یک فرمت خاص است. این فرمت به کاربر اجازه ذخیره یا حتی انتقال داده را می دهد. سپس داده ها هر زمان که نیاز باشد شی را با فرایندی به نام سریالایزشن بازسازی می کنند. سریالایزشن یک فرآیند مهم برای کارهای مربوط به برنامه نویسی و وب سرویس ها است.


در این مطلب با نحوه استفاده از دو کتابخانه سریالایزشن رایج در پایتون برای سریالایزشن اشیا داده ای مانند دیکشنری ها و مدل های کاربردی هوش مصنوعی مانند تنسورفلو در پایتون برای ذخیره سازی و انتقال آشنا خواهید شد.


کی و کجا استفاده کنیم؟

به ذخیره سازی و جابه جای یک مقدار مشخصی یا یک عدد صحیح فکر کنید؛ چگونه می توانید آن را در یک فایل ذخیره یا انتقال دهید؟ حال اگر بخوایم یک شی یا آرایه پیچیده و یا کلاس را در جایی ذخیره کنیم و به برنامه های دیگر منتقل کنیم؟ در اینجاست که مبحث سریالایزشن مطرح میشود که بتوان با یک فرمت استاندارد این کار را کرد

فرمت های مختلفی برای سریالایزشن داده ها وجود دارد، برای مثال JSON، XML، HDF۵، و Pickle برای اهداف مختلف JSON، یک فرم رشته قابل خواندن توسط انسان را برمی گرداند، در حالی که کتابخانه Pickle می تواند یک آرایه بایت را برگرداند.

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

  • JSON
  • Binary File

برای باینری فایل ها در پایتون کتابخانه های مختلفی مانند Pickle, Marshal و HDF۵ وجود دارد ولی Marshal خیلی ابتدایی تر از Pickle ها هست به همین خاطر اکثرا از Pickle استفاده می شود.

برخی مزایا استفاده Pickle ها نسبت به Marshal:

  1. در کتابخانه Marshal اگر ارجاعات مختلفی به یک object اشاره کند به احتمال خیلی زیاد interpreter پایتون کرش می کند
  2. در Pickle ها برای ارجاعات فعلی تا اونجای که امکانش باشد از ارجاعات قبلی استفاده میشود و به همین دلیل حجم سایز Pickle معمولا به کمتر هستند
  3. روش Marshal serialization ممکن هست بین نسخه های مختلف پایتون خروجی متفاوتی داشته باشد
تفاوت های اساسی بین پروتکل های Pickle و JSON وجود دارد:
  • JSON یک فرمت سریال سازی متن است کدگذاری می شود، در حالی که Pickle یک فرمت سریال سازی باینری است؛
  • JSON قابل خواندن توسط انسان است، در حالی که Pickle نیست؛
  • JSON در خارج از اکوسیستم پایتون قابل تعامل و استفاده است، در حالی که Pickle مختص خود پایتون و داخل خود برنامه قابلیت serialize deserialize است.
  • JSON به طور پیش فرض، تنها می تواند زیرمجموعه ای از انواع داده های پایتون کار کند و هیچ کلاس یا نوع داده ای سفارشی ندارد اما Pickle می تواند تعداد بسیار زیادی از انواع داده ای پایتون و غیره کار کند.
  • بر خلاف Pickle خود JSON به خودی خود یک آسیب پذیری اجرای کد ایجاد نمی کند.


Pickle اغلب برای تولید داده های حجیم تو حوزه هوش مصنوعی استفاده می شود که فقط تبادل دیتا بین خود کتابخانه ها استفاده شود.

نکته : کتابخانه ای Pickle امن نیست و ممکن هست موقع unpack کردن داده ها ویروس یا آسیب پذیری وارد سیستم شود در نتیجه داده های که ازشان اطمینان دارید unpack کنید. اگر می خواهید از داده مطمعن شوید که دستکاری یا آلوده نشده اند می توانید از hmac برای امضا وبررسی کردن استفاده کنید.

نمونه کد استفاده از کتابخانه ای Pickle

import pickle popular_langs=[&quotPython&quot,&quotGo&quot,&quotPhp&quot,&quotJs&quot] &quot&quot&quot Write pickle binary file &quot&quot&quot pik_file= open(&quotdata&quot,&quotwb&quot) pickle.dump(popular_langs,pik_file) pik_file.close() &quot&quot&quot Read pickle binary file &quot&quot&quot load_file=open(&quotdata&quot,'rb') load_data=pickle.load(load_file) load_file.close() print(load_data)

نمونه کد استفاده از کتابخانه ای HDF5

import h5py &quot&quot&quot Write HDF5 binary file &quot&quot&quot with h5py.File(&quottest.hdf5&quot, &quotw&quot) as file: dataset = file.create_dataset(&quottest_data&quot, (۱۰,۲۰,۴۰,)) &quot&quot&quot Read HDF5 binary file &quot&quot&quot with h5py.File(&quottest.hdf5&quot, &quotr&quot) as file: dataset = file[&quottest_data&quot] print({ &quotdata&quot:dataset, &quotkeys&quot:file.keys() })

نتیجه گیری

هدف آن ساده سازی روش های ذخیره سازی داده برای یک متخصص داده است. serialization در پایتون یکی از مهم ترین ویژگی هایی است که رابط تبدیل داده ها را آسان می کند. در این مقاله در مورد چرایی نیاز به سریال سازی صحبت کرده ایم. فرآیند serialization به کاربر پایتون اجازه می دهد تا داده های خود را در کنار حفظ ساختار اصلی ارسال، دریافت و ذخیره کند.

نسخه ای کامل این مطب در لینک زیر موجود می باشد

https://devcoach.ir/سریالایزشن-پایتون-python-serialization/


پایتونهوش مصنوعیpython programming
توسعه دهنده ، دوستدار روانشناسی ،هوش مصنوعی ،کارآفرینی،برنامه نویسی
شاید از این پست‌ها خوشتان بیاید