آموزش سریال سازی شی در برنامه نویسی شی گرا در پایتون

3 سال پیش
برنامه نویسی شی گرا در پایتون

آموزش سریال سازی شی در برنامه نویسی شی گرا در پایتون

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش سریال سازی شی در برنامه نویسی شی گرا در پایتون خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون

در زمینه ذخیره داده ها، سریال سازی فرایند تبدیل ساختارهای داده یا حالت شی به فرمت قابل ذخیره (به عنوان مثال ، در یک فایل یا بافر حافظه) یا انتقال و بازسازی بعداست.

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

 

آموزش Pickle در پایتون

Pickle کردن فرایندی است که طی آن سلسله مراتب شیء پایتون به یک جریان بایت تبدیل می شود (معمولاً برای انسان قابل خواندن نیست) تا در یک فایل نوشته شود ، که به آن Serialization نیز گفته می شود. Unpickling یک عملیات معکوس است که در آن یک جریان بایت دوباره به سلسله مراتب شیء پایتون کار می کند.

Pickle ساده ترین روش برای ذخیره سازی شی است. ماژول  Pickle یک روش شی گرا برای ذخیره مستقیم اشیاء در قالب ذخیره سازی خاص است.

 

Pickle چه کاری می تواند انجام دهد؟

  • Pickle می تواند دیکشنری ها و فهرست ها را به راحتی ذخیره و تکثیر کند.
  • ویژگی های شی را ذخیره کرده و به همان حالت باز می گرداند.

 

Pickle چه کاری نمی تواند انجام دهد؟

  • این کد یک شیء را ذخیره نمی کند. فقط ویژگیهای مقادیر آن است.
  • نمی تواند دسته فایل یا سوکت اتصال را ذخیره کند.

به طور خلاصه می توان گفت، Pickle راهی برای ذخیره و بازیابی متغیرهای داده به داخل و خارج از فایل ها است که در آن متغیرها می توانند لیست، کلاس و غیره باشند.

برایانجام Pickle چه باید کرد؟

  • وارد کردن Pickle
  • یک متغیر به فایل بنویسید، چیزی شبیه به مورد زیر

 

pickle.dump(mystring, outfile, protocol),

 

متد های Pickle

رابط Pickle چهار روش مختلف را ارائه می دهد.

  1. ()dump -روش () dump  به صورت یک فایل باز (شیء شبیه فایل) سریال می شود.
  2. () dumps – سریال را به یک رشته تبدیل می کند
  3. () load -از یک شیء باز باز زدایی می کند.
  4. () loads  – از یک رشته به طور کامل از بین می رود.

بر اساس روش فوق، در زیر نمونه ای از pickling آمده است.

Pickling

خروجی

My Cat pussy is White and has 4 legs
Would you like to see her pickled? Here she is!
b'\x80\x03c__main__\nCat\nq\x00)\x81q\x01}q\x02(X\x0e\x00\x00\x00number_of_legsq\x03K\x04X\x05\x00\x00\x00colorq\x04X\x05\x00\x00\x00Whiteq\x05ub.'

 

بنابراین در مثال بالا ما یک نمونه از کلاس Cat ایجاد کرده و سپس آن را pickling کرده ایم و نمونه “Cat” خود را به یک آرایه ساده از بایت ها تبدیل کرده ایم.

به این ترتیب ما می توانیم آرایه بایت ها را به راحتی در یک فایل باینری یا در یک پایگاه داده ذخیره کرده و بعداً از پشتیبانی ذخیره سازی خود به شکل اولیه بازگردانیم.

همچنین اگر می خواهید یک فایل با یک شی pickling ایجاد کنید، می توانید از روش ()dump  (به جای dump* ()* one) از یک فایل باینری باز شده نیز استفاده کنید و نتیجه pickling به طور خودکار در فایل ذخیره می شود.

[….]
binary_file = open(my_pickled_Pussy.bin', mode='wb')
my_pickled_Pussy = pickle.dump(Pussy, binary_file)
binary_file.close()

 

 

آموزش Unpickling در پایتون

به فرایندی که یک آرایه دودویی می گیرد و آن را به سلسله مراتب شی تبدیل می کند، Unpickling گفته می شود.

فرآیند Unpickling با استفاده از تابع ()load ماژول pickle انجام می شود و یک سلسله مراتب کامل شی را از یک آرایه بایت ساده باز می گرداند.

بیایید از تابع بار در مثال قبلی خود استفاده کنیم.

برنامه نویسی شی گرا در پایتون

خروجی

MeOw is black
Pussy is white

 

آموزش JSON در پایتون

JSON (JavaScript Object Notation) بخشی از کتابخانه استاندارد پایتون است که یک قالب تبادل داده سبک وزن است. خواندن و نوشتن برای انسان آسان است. تجزیه و تولید آن آسان است.

به دلیل سادگی، JSON راهی است که ما از طریق آن داده ها را ذخیره و تبادل می کنیم ، که از طریق نحو JSON آن انجام می شود و در بسیاری از برنامه های وب استفاده می شود. همانطور که در قالب قابل خواندن برای انسان است و این ممکن است یکی از دلایل استفاده از آن در انتقال داده باشد، علاوه بر اثربخشی آن هنگام کار با API ها.

نمونه ای از داده های فرمت JSON به شرح زیر است-

{"EmployID": 40203, "Name": "Zack", "Age":54, "isEmployed": True}

 

پایتون کار با فایل های Json را ساده کرده است. ماژول مورد استفاده برای این منظور ماژول JSON است. این ماژول باید در نصب پایتون شما (داخلی) گنجانده شود.

بنابراین بیایید ببینیم چگونه می توان فرهنگ لغت پایتون را به JSON تبدیل و آن را به یک فایل متنی نوشت.

JSON به پایتون

خواندن JSON به معنای تبدیل JSON به مقدار (شی) پایتون است. کتابخانه json JSON را به یک دیکشنری یا لیست در پایتون تجزیه می کند. برای انجام این کار ما از تابع ()loads  استفاده می کنیم ، به شرح زیر –

برنامه نویسی شی گرا در پایتون

خروجی

برنامه نویسی شی گرا در پایتون

در زیر یک نمونه فایل json است ،

data1.json
{"menu": {
   "id": "file",
   "value": "File",
   "popup": {
      "menuitem": [
         {"value": "New", "onclick": "CreateNewDoc()"},
         {"value": "Open", "onclick": "OpenDoc()"},
         {"value": "Close", "onclick": "CloseDoc()"}
      ]
   }

 

محتوای فوق (Data1.json) مانند یک دیکشنری معمولی است. ما می توانیم از pickle برای ذخیره این فایل استفاده کنیم اما خروجی آن قابل خواندن برای انسان نیست.

JSON (Java Script Object Notification) یک قالب بسیار ساده است و یکی از دلایل محبوبیت آن است. اکنون اجازه دهید خروجی json را از طریق برنامه زیر بررسی کنیم.

برنامه نویسی شی گرا در پایتون
خروجی

برنامه نویسی شی گرا در پایتون

در بالا ما فایل json (data1.json) را برای خواندن باز می کنیم، کنترل کننده فایل را بدست می آوریم و به json.load منتقل می کنیم و شی را پس می گیریم. وقتی سعی می کنیم خروجی شی را چاپ کنیم، همان فایل json است. اگرچه نوع شیء دیکشنری است پ، اما به عنوان یک شی پایتون ظاهر می شود. نوشتن برای json ساده است همانطور که این pickle را دیدیم. در بالا فایل json را بارگذاری می کنیم، یک جفت مقدار کلید دیگر اضافه می کنیم و آن را در همان فایل json می نویسیم. حال اگر data1.json را مشاهده کنیم، متفاوت به نظر می رسد. نه با همان فرمت که قبلاً دیدیم.

برای اینکه خروجی ما یکسان به نظر برسد (قالب قابل خواندن برای انسان) ، دو آرگومان را به آخرین خط برنامه اضافه کنید ،

json.dump (conf ، fh ، indent = 4 ، separators = (‘،’ ، ‘:‘))

 

به طور مشابه مانند pickle، می توانیم رشته را با دامپ پرینت کرده و با بار بارگذاری کنیم. در زیر نمونه ای از آن آمده است

 

برنامه نویسی شی گرا در پایتون

آموزش YAML در پایتون 

YAML ممکن است دوستانه ترین استاندارد سریال سازی داده ها برای همه زبان های برنامه نویسی باشد.

ماژول Python yaml pyaml نامیده می شود

YAML جایگزینی برای JSON است –

  • کد قابل خواندن-YAML آنقدر خواندنی ترین فرمت برای انسان است که حتی محتوای صفحه اول آن در YAML نمایش داده می شود تا به این نکته برسد.
  • کد فشرده – در YAML از تورفتگی فضای سفید برای نشان دادن ساختار و نه براکت استفاده می کنیم.
  • نحو برای داده های رابطه ای – برای مراجع داخلی ما از لنگر (&) و نام مستعار (*) استفاده می کنیم.
  • یکی از زمینه هایی که به طور گسترده مورد استفاده قرار می گیرد مشاهده یا ویرایش ساختارهای داده است – به عنوان مثال پرونده های پیکربندی ، تخلیه در هنگام اشکال زدایی و سربرگ سند.

آموزش نصب YAML

از آنجا که yaml یک ماژول داخلی نیست، باید آن را به صورت دستی نصب کنیم. بهترین راه برای نصب yaml بر روی دستگاه ویندوز از طریق pip است. برای نصب yaml دستور زیر را در ترمینال ویندوز خود اجرا کنید ،

pip install pyaml (Windows machine)
sudo pip install pyaml (*nix and Mac)

 

با اجرای دستور بالا، صفحه ای بر اساس آخرین نسخه فعلی چیزی شبیه به زیر نشان می دهد.

Collecting pyaml
Using cached pyaml-17.12.1-py2.py3-none-any.whl
Collecting PyYAML (from pyaml)
Using cached PyYAML-3.12.tar.gz
Installing collected packages: PyYAML, pyaml
Running setup.py install for PyYAML ... done
Successfully installed PyYAML-3.12 pyaml-17.12.1

 

برای آزمایش آن به پایتون شل بروید و ماژول yaml را وارد کنید، yaml را وارد کنید ، اگر خطایی پیدا نشد، می توانیم بگوییم نصب موفقیت آمیز است.

پس از نصب pyaml، اجازه دهید کد زیر را بررسی کنیم ،

script_yaml1.pyYaml

برنامه نویسی شی گرا در پایتون

در بالا ما سه ساختار مختلف داده ایجاد کردیم ، دیکشنری، لیست و تاپل. روی هر کدام از ساختارها، yaml.dump را انجام می دهیم. نکته مهم نحوه نمایش خروجی روی صفحه است.

خروجی

برنامه نویسی شی گرا در پایتون

بنابراین فرض کنید من یک فایل yaml دارم که شامل موارد زیر است:

---
# An employee record
name: Raagvendra Joshi
job: Developer
skill: Oracle
employed: True
foods:
   - Apple
   - Orange
   - Strawberry
   - Mango
languages:
   Oracle: Elite
   power_builder: Elite
   Full Stack Developer: Lame
education:
   ۴ GCSEs
   ۳ A-Levels
   MCA in something called com

 

حالا بیایید یک کد بنویسیم تا این فایل yaml از طریق تابع yaml.load بارگیری شود.

برنامه نویسی شی گرا در پایتون

از آنجا که خروجی چندان قابل خواندن به نظر نمی رسد، من با استفاده از json در پایان آن را زیبا می کنیم. خروجی به دست آمده را با فایل yaml واقعی که داریم مقایسه کنید.

خروجی

برنامه نویسی شی گرا در پایتون

 

یکی از مهمترین جنبه های توسعه نرم افزار اشکال زدایی است. در این بخش ما روش های مختلف اشکال زدایی پایتون را با اشکال زدای داخلی یا اشکال زدای شخص ثالث خواهیم دید.

ماژول PDB – اشکال زدایی پایتون

ماژول PDB از تنظیم نقاط شکست استفاده می کند. نقطه توقف (breakpoint) یک وقفه عمدی برنامه است، که در آن می توانید اطلاعات بیشتری در مورد وضعیت برنامه ها بدست آورید.

برای تنظیم breakpoint ، خط را وارد کنید

pdb.set_trace()

 

مثال ماژول PDB

pdb_example1.py
import pdb
x = 9
y = 7
pdb.set_trace()
total = x + y
pdb.set_trace()

 

ما چند نقطه شکست در این برنامه قرار داده ایم. برنامه در هر نقطه شکست (pdb.set_trace ()) متوقف می شود. برای مشاهده محتویات متغیرها کافی است نام متغیر را تایپ کنید.

c:\Python\Python361>Python pdb_example1.py
> c:\Python\Python361\pdb_example1.py(8)<module>()
-> total = x + y
(Pdb) x
۹
(Pdb) y
۷
(Pdb) total
*** NameError: name 'total' is not defined
(Pdb)

 

c را فشار دهید یا به اجرای برنامه ها تا نقطه شکست بعدی ادامه دهید.

(Pdb) c
--Return--
> c:\Python\Python361\pdb_example1.py(8)<module>()->None
-> total = x + y
(Pdb) total
۱۶

 

در نهایت شما باید برنامه های بسیار بزرگتر را اشکال زدایی کنید – برنامه هایی که از زیربرنامه ها استفاده می کنند. و گاهی اوقات مشکلی که سعی می کنید پیدا کنید در یک روال فرعی قرار دارد. برنامه زیر را در نظر بگیرید.

import pdb
def squar(x, y):
   out_squared = x^2 + y^2
   return out_squared
if __name__ == "__main__":
   #pdb.set_trace()
   print (squar(4, 5))

 

در حال اجرای برنامه فوق ،

c:\Python\Python361>Python pdb_example2.py
> c:\Python\Python361\pdb_example2.py(10)<module>()
-> print (squar(4, 5))
(Pdb)

 

در این مرحله ضربه زدن به s برای ورود به آن خط مفید است.

(Pdb) s
--Call--
>c:\Python\Python361\pdb_example2.py(3)squar()
-> def squar(x, y):

 

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

(Pdb) l
۱ import pdb
۲
۳ def squar(x, y):
۴ -> out_squared = x^2 + y^2
۵
۶ return out_squared
۷
۸ if __name__ == "__main__":
۹ pdb.set_trace()
۱۰ print (squar(4, 5))
[EOF]
(Pdb)

 

برای پیشروی در خط بعدی می توانید n را بزنید. در این مرحله شما داخل متد out_squared هستید و به متغیری که در داخل تابع اعلام شده است دسترسی دارید. x و y

(Pdb) x
۴
(Pdb) y
۵
(Pdb) x^2
۶
(Pdb) y^2
۷
(Pdb) x**2
۱۶
(Pdb) y**2
۲۵
(Pdb)

 

بنابراین ما می توانیم ببینیم که عملگر ^ آن چیزی نیست که ما می خواستیم بلکه باید از عملگر ** برای انجام مربع استفاده کنیم.

به این ترتیب ما می توانیم برنامه خود را در داخل توابع/متدها اشکال زدایی کنیم.

ماژول ورود به سیستم

ماژول ورود به سیستم از زمان نسخه ۲٫۳ پایتون بخشی از کتابخانه استاندارد پایتون بوده است. به عنوان یک ماژول داخلی ، همه ماژول های پایتون می توانند در ورود به سیستم مشارکت داشته باشند ، بنابراین گزارش برنامه ما می تواند شامل پیام خود شما باشد که با پیام های ماژول شخص ثالث ادغام شده است. انعطاف پذیری و عملکرد زیادی را ارائه می دهد.

مزایای ورود به سیستم

  • ثبت تشخیصی – رویدادهای مربوط به عملکرد برنامه را ثبت می کند.
  • ثبت حسابرسی – رویدادها را برای تجزیه و تحلیل کسب و کار ثبت می کند.
  • پیامها در سطوح “شدت” و minu نوشته و ثبت می شوند
  • DEBUG (اشکال زدایی ()) – پیامهای تشخیصی برای توسعه.
  • INFO (info ()) – پیامهای استاندارد “پیشرفت”.
  • هشدار -یک مسئله غیر جدی را تشخیص داد.
  • خطا- با خطایی روبرو شدید ، احتمالاً جدی.

بیایید برنامه ساده زیر را بررسی کنیم ،

import logging

logging.basicConfig(level=logging.INFO)

logging.debug('this message will be ignored') # This will not print
logging.info('This should be logged') # it'll print
logging.warning('And this, too') # It'll print

 

در بالا ما پیام ها را در سطح severity وارد می کنیم. ابتدا ماژول را وارد می کنیم، BasicConfig را فراخوانی می کنیم و سطح ورود را تعیین می کنیم. سطحی که در بالا تعیین کردیم INFO است. سپس ما سه بیانیه متفاوت داریم: دستور اشکال زدایی ، بیانیه اطلاعات و بیانیه اخطار.

خروجی logging1.py

INFO:root:This should be logged
WARNING:root:And this, too

 

از آنجا که دستور اطلاعات در زیر دستور اشکال زدایی است ، نمی توانیم پیام اشکال زدایی را ببینیم. برای به دست آوردن دستور اشکال زدایی نیز در ترمینال Output ، تنها چیزی که باید تغییر دهیم سطح BasicConfig است.

logging.basicConfig(level = logging.DEBUG)

 

و در خروجی می توانیم ببینیم

DEBUG:root:this message will be ignored
INFO:root:This should be logged
WARNING:root:And this, too

 

همچنین رفتار پیش فرض به این معنی است که اگر هیچ سطح ورود به سیستم را تنظیم نکنیم هشدار می دهد. فقط خط دوم برنامه فوق را کامنت کنید و کد را اجرا کنید.

#logging.basicConfig(level = logging.DEBUG)

 

خروجی

 

WARNING:root:And this, too

 

پایتون ساخته شده در سطح ورود به سیستم در واقع اعداد صحیح هستند.

>>> import logging
>>>
>>> logging.DEBUG
۱۰
>>> logging.CRITICAL
۵۰
>>> logging.WARNING
۳۰
>>> logging.INFO
۲۰
>>> logging.ERROR
۴۰
>>>

 

همچنین می توانیم پیغام های log را در فایل ذخیره کنیم.

logging.basicConfig(level = logging.DEBUG, filename = 'logging.log')

 

اکنون همه پیامهای ورود به سیستم، فایل (logging.log) را در فهرست فعلی کار خود به جای صفحه نمایش می دهند. این رویکرد بسیار بهتری است زیرا به ما امکان می دهد پیام هایی را که دریافت کرده ایم ارسال کنیم.

ما همچنین می توانیم تاریخ را با پیام log خود تنظیم کنیم.

logging.basicConfig(level=logging.DEBUG, format = '%(asctime)s %(levelname)s:%(message)s')

 

خروجی چیزی شبیه به مورد زیر می شود

۲۰۱۸-۰۳-۰۸ ۱۹:۳۰:۰۰,۰۶۶ DEBUG:this message will be ignored
۲۰۱۸-۰۳-۰۸ ۱۹:۳۰:۰۰,۱۷۶ INFO:This should be logged
۲۰۱۸-۰۳-۰۸ ۱۹:۳۰:۰۰,۲۰۱ WARNING:And this, too

 

منبع.

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

  1. آموزش برنامه نویسی شی گرا در پایتون
  2. آموزش مقدماتی برنامه نویسی شی گرا در پایتون
  3. آموزش راه اندازی محیط برنامه نویسی شی گرا در پایتون
  4. آموزش ساختار داده برنامه نویسی شی گرا در پایتون
  5. آموزش بلوک ها در برنامه نویسی شی گرا در پایتون
  6. آموزش میانبرها در برنامه نویسی شی گرا در پایتون
  7. آموزش وراثت و چند شکلی در برنامه نویسی شی گرا در پایتون
  8. آموزش الگوی طراحی در برنامه نویسی شی گرا در پایتون
  9. آموزش ویژگی های پیشرفته در برنامه نویسی شی گرا در پایتون
  10. آموزش فایل ها و رشته ها در برنامه نویسی شی گرا در پایتون
  11. آموزش مدیریت استثنا در برنامه نویسی شی گرا در پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه