آموزش پایتون
2 subscribers
3 photos
35 links
Download Telegram
مثال بالا یک رشته JSON را چاپ می‌کند، اما با عدم وجود تورفتگی و شکست خطوط، خوانایی آن به مراتب کاهش می‌یابد.

متد json.dumps() دارای پارامترهایی است که امکان بهبود خوانایی خروجی را فراهم می‌کنند:

مثال
از پارامتر indent برای تعیین تعداد فاصله‌های تورفتگی استفاده کنید:

json.dumps(x, indent=4)


همچنین می‌توانید جداکننده‌ها را تعیین کنید، مقدار پیش‌فرض (", ", ": ") است که به معنی استفاده از کاما و یک فاصله برای جدا کردن هر شیء، و نقطه و یک فاصله برای جدا کردن کلیدها از مقادیر است:

مثال
از پارامتر separators برای تغییر جداکننده‌های پیش‌فرض استفاده کنید:

json.dumps(x, indent=4, separators=(". ", " = "))


ترتیب کلیدها را مشخص کنید
متد json.dumps() دارای پارامترهایی است که امکان مشخص کردن ترتیب کلیدها در خروجی را فراهم می‌کنند:

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


json.dumps(x, indent=4, sort_keys=True)
برای استفاده از اکسپرسیون‌های منظم یا رگکس در پایتون باید از ماژول re استفاده کنیم.

ماژول re در پایتون ساخته شده تا کار با اکسپرسیون‌های منظم را آسان کند.

برای استفاده از این ماژول باید آن را وارد کنیم:


import re


سپس می‌توانیم اکسپرسیون‌های منظم را در پایتون مورد استفاده قرار دهیم.

به عنوان مثال می‌خواهیم ببینیم آیا متنی شامل "The rain in Spain" است یا خیر:


txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)


این دستور re.search را اجرا می‌کند تا ببیند آیا متن شروع با "The" و پایان با "Spain" است یا خیر.
import re

txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)

if x:
print("YES! We have a match!")
else:
print("No match")

➡️
YES! We have a match!
در ماژول re پایتون، توابع مختلفی وجود دارد که امکان جستجو در متن را برای یافتن الگوهای مناسب فراهم می‌کنند:

- findall:
لیستی از تمام موارد مطابقت یافته را برمی‌گرداند

- search:
اگر مطابقتی پیدا کرد ، شیء مطابقت را برمی‌گرداند. الگو در هر کجای متن پیدا شده باشد

- split:
متن را بر اساس هر الگوی مطابقت پیدا شده به لیستی تبدیل و برمی‌گرداند

- sub:
یک یا چند مورد از مطابقت‌ها را با یک رشته جایگزین می‌کند

این توابع امکان جستجو در متن و پردازش الگوهای منظم را فراهم می‌آورند.
🔴در اکسپرسیون‌های منظم، کاراکترهای ویژه‌ای وجود دارند که معنای خاصی دارند:

🔻 [] :
مجموعه‌ای از کاراکترها را مشخص می‌کند

🔻 \ :
رشته‌ای ویژه را نشان می‌دهد یا می‌تواند برای فرار از کاراکترهای ویژه مورد استفاده قرار گیرد

🔻 . :
هر کاراکتر (بجز کاراکتر بازگشت به ابتدا) را نشان می‌دهد

🔻 ^ :
شروع با

🔻 $ :
پایان با

🔻 * :
صفر یا بیشتر بار تکرار

🔻 + :
یک یا بیشتر بار تکرار

🔻 ? :
صفر یا یک بار تکرار

🔻 {} :
تعداد دقیق تکرار

🔻 | :
یا

🔻 ():
گروه‌بندی و الگویی برای برداشتن


این کاراکترها معنای ویژه‌ای در الگوهای منظم دارند.
🔵 در اکسپرسیون‌های منظم، دنباله‌های ویژه‌ای وجود دارند که شامل \ و سپس یکی از کاراکترهای زیر هستند و معنای خاصی دارند:


🔹 \A:
مطابقت با شروع رشته

🔹 \b:
مطابقت با شروع یا پایان کلمه

🔹 \B:
مطابقت با کاراکترهای موجود در کلمه اما نه در شروع یا پایان

🔹 \d:
شامل رقم

🔹 \D:
شامل رقم نیست

🔹 \s:
شامل کاراکتر فاصله

🔹 \S:
شامل کاراکتر فاصله نیست

🔹 \w:
شامل کاراکترهای الفبایی و رقمی

🔹 \W:
شامل کاراکترهای الفبایی و رقمی نیست

🔹 \Z:
مطابقت با پایان رشته



این دنباله‌های ویژه معنای خاصی در الگوهای منظم دارند.
🟠 در الگوهای منظم در براکت مربعی [] مجموعه‌ای از کاراکترها قرار داده می‌شود که معنای خاصی دارند:

🔸 [arn]:
بازگردان مطابقت با کاراکترهای a, r و n

🔸 [a-n]:
بازگردان مطابقت با هر کاراکتر کوچک بین a تا n در الفبا

🔸 [^arn]:
بازگردان مطابقت بجز کاراکترهای a, r و n

🔸 [0123]:
بازگردان مطابقت با اعداد 0, 1, 2, 3

🔸 [0-9]:
بازگردان مطابقت با اعداد میان 0 تا 9

🔸 [0-5][0-9]:
بازگردان مطابقت با اعداد دو رقمی از 00 تا 59

🔸 [a-zA-Z]:
بازگردان مطابقت با حروف بزرگ یا کوچک الفبا

🔸 [+]:
بازگردان مطابقت با کاراکتر + زیرا در مجموعه‌های براکتی + کاراکتر ویژه نیست
تابع findall() در ماژول re پایتون، لیستی از تمام موارد مطابقت یافته را برمی‌گرداند.

به عنوان مثال:

لیست تمام موارد مطابقت را چاپ کنید:


import re

txt = "The rain in Spain"
x = re.findall("ai", txt)
print(x)

➡️
['ai', 'ai']


این تابع findall تمام زیررشته‌های "ai" در متن را پیدا می‌کند و در یک لیست برمی‌گرداند.

اگر مطابقتی پیدا نشود، لیست تهی برگردانده می‌شود:

import re

txt = "The rain in Spain"

x = re.findall("Portugal", txt)
print(x)

if (x):
print("Yes, there is at least one match!")
else:
print("No match")

➡️
[]
No match
تابع search() در ماژول re پایتون رشته را به دنبال الگوی مورد نظر جستجو می‌کند و در صورت یافتن مطابقت، شیء مربوطه را برمی‌گرداند.

اگر چندین مورد مطابقت وجود داشته باشد، تنها اولین مورد برگردانده می‌شود:


import re

txt = "The rain in Spain"
x = re.search("\s", txt)

print("The first white-space character is located in position:", x.start())

➡️
The first white-space character is located in position: 3


این برنامه مکان اولین کاراکتر فاصله در متن را چاپ می‌کند.

اگر مطابقتی پیدا نشود None برمی‌گردد:


import re

txt = "The rain in Spain"
x = re.search("Portugal", txt)
print(x)

➡️
None


این جستجو هیچ مطابقتی ندارد و None چاپ می‌شود.
تابع split() در ماژول re پایتون رشته را بر اساس الگوی مطابقت به لیستی تبدیل می‌کند.

برای مثال:

import re

txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)

➡️
['The', 'rain', 'in', 'Spain']



این دستور متن را بر اساس فواصل در یک لیست قرار می‌دهد.

می‌توان تعداد جداسازی‌ها را با پارامتر maxsplit کنترل کرد:

import re

txt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)

➡️
['The', 'rain in Spain']

این دستور متن را فقط بر اساس اولین فاصله به دو زیررشته تقسیم می‌کند
تابع sub() در ماژول re پایتون، موارد مطابقت را با رشته مورد نظر جایگزین می‌کند.

برای مثال:
import re

txt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)

➡️
The9rain9in9Spain


این دستور همه فواصل را با عدد 9 جایگزین می‌کند.

تعداد جایگزینی‌ها را می‌توان با آرگومان count مشخص کرد:

import re

txt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)

➡️
The9rain9in Spain


این دستور تنها دو مورد اول را جایگزین می‌کند.
یک "شیء مطابق" (Match Object) یک شیء است که حاوی اطلاعاتی درباره جستجو و نتیجه آن است.

توجه: اگر مطابقتی وجود نداشته باشد، به جای شیء مطابق، مقدار None برگردانده خواهد شد.

برای مثال، جستجویی را انجام دهید که یک شیء مطابق برگرداند:

import re

txt = "The rain in Spain"
x = re.search("ai", txt)
print(x)

➡️
<re.Match object; span=(5, 7), match='ai'>


شیء مطابق دارای ویژگی‌ها و روش‌هایی است که برای بازیابی اطلاعات درباره جستجو و نتیجه آن استفاده می‌شود:

- .span()
یک tuple حاوی موقعیت شروع و پایان مطابقت را برمی‌گرداند.
- .string
رشته‌ای که به تابع منتقل شده را برمی‌گرداند.
- .group()
قسمتی از رشته که مطابقت داشته را برمی‌گرداند.

برای مثال، موقعیت (شروع و پایان) اولین وقوع مطابقت را چاپ کنید.

عبارت منظم به دنبال هر کلمه‌ای است که با "S" حروف بزرگ شروع می‌شود:

import re

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())

➡️
(12, 17)


برای مثال، رشته‌ای که به تابع منتقل شده را چاپ کنید:
import re

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)

➡️
The rain in Spain


برای مثال، قسمتی از رشته که مطابقت داشته را چاپ کنید.

عبارت منظم به دنبال هر کلمه‌ای است که با "S" حروف بزرگ شروع می‌شود:
import re

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())

➡️
Spain


توجه: اگر مطابقتی وجود نداشته باشد، به جای شیء مطابق، مقدار None برگردانده خواهد شد.
پایپ (PIP) چیست؟

پایپ (PIP) مدیریت بسته های پایتون است. بسته ها شامل تمام فایل هایی هستند که برای اضافه کردن یک ماژول (کتابخانه کد) به پروژه پایتون نیاز دارید.

ماژول ها کتابخانه های کد هستند که می توانید در پروژه خود استفاده کنید.

تشخیص نصب شدن پایپ

برای تشخیص اینکه آیا پایپ نصب شده است یا خیر، می توانید به مسیر اسکریپت های پایتون بروید و دستور زیر را وارد کنید:

مثال:

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip --version

که نسخه پایپ را چک می کند.
نصب PIP

اگر پایپ روی سیستم شما نصب نیست، می‌توانید آن را از این صفحه دانلود و نصب کنید: https://pypi.org/project/pip/

دانلود ماژول

دانلود کردن یک بسته بسیار ساده است. باید خط فرمان را باز کنید و به پایپ بگویید که بسته مورد نظر را دانلود کند.

به مسیر اسکریپت‌های پایتون بروید و دستور زیر را وارد کنید:

مثال:

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip install camelcase

با این دستور، بسته‌ای به نام "camelcase" دانلود و نصب می‌شود. این اولین بسته‌ای است که شما دانلود و نصب کرده‌اید.
استفاده از بسته

پس از نصب بسته، آماده استفاده از آن هستید. برای استفاده از بسته "camelcase" باید آن را در پروژه خود وارد کنید:

مثال:
وارد کردن و استفاده از بسته "camelcase":

import camelcase

c = camelcase.CamelCase()

txt = "lorem ipsum dolor sit amet"

print(c.hump(txt))

➡️
Lorem Ipsum Dolor Sit Amet


برای پیدا کردن بسته‌های بیشتر می‌توانید به آدرس https://pypi.org/ مراجعه کنید.


حذف بسته

برای حذف بسته از دستور uninstall استفاده کنید:

مثال:

حذف بسته به نام "camelcase":

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip uninstall camelcase

پی اچ پی برای تایید حذف بسته سوال می‌کند.



لیست بسته‌های نصب شده

برای لیست گرفتن از بسته‌های نصب شده در سیستم، از دستور pip list استفاده می‌کنیم.

مثال:

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip list

این دستور فهرستی از تمام بسته‌های نصب شده در سیستم را به همراه نسخه‌ آن‌ها نمایش می‌دهد.

Package Version
-----------------------
camelcase 0.2
mysql-connector 2.1.6
pip 18.1
pymongo 3.6.1
setuptools 39.0.1

با استفاده از این دستور می‌توان لیست کامل بسته‌های نصب شده را مشاهده کرد.
در پایتون، بلاک try-except برای مدیریت استثناء‌ها (خطاها) استفاده می‌شود.

▫️ بلاک try: این بلاک به شما امکان می‌دهد یک بلاک کد را برای بررسی خطاها تست کنید. در این بلاک، قسمتی از کد که ممکن است خطا ایجاد کند قرار می‌گیرد.

▫️ بلاک except: این بلاک به شما امکان می‌دهد خطاها را مدیریت کنید. وقتی یک خطا در بلاک try رخ می‌دهد، کنترل به بلاک except منتقل می‌شود و کد موجود در این بلاک اجرا می‌شود.

▫️ بلاک else: این بلاک به شما امکان می‌دهد کدی را اجرا کنید که در صورت عدم وجود خطا در بلاک try قرار دارد. به عبارت دیگر، اگر هیچ خطایی در بلاک try رخ ندهد، بلاک else اجرا می‌شود.

▫️ بلاک finally: این بلاک به شما امکان می‌دهد کدی را اجرا کنید که باید در هر صورت، بعد از اجرای بلاک try و except، اجرا شود. بدون توجه به وجود یا عدم وجود خطا، بلاک finally همیشه اجرا می‌شود.

این بلاک‌ها در مجموعه‌ای از کدها استفاده می‌شوند تا کنترل برنامه در مواقعی که خطا رخ می‌دهد، به دست بگیرد و اقدامات مناسب برای مدیریت خطا انجام شود.
در پایتون وقتی خطایی رخ می‌دهد، یک استثنا (exception) ایجاد می‌شود که معمولا باعث متوقف شدن برنامه می‌شود.

ما می‌توانیم استثناها را با استفاده از دستور try-except هندل کنیم:


try:
print(x)
except:
print("An exception occurred")


خروجی:


An exception occurred


در این مثال، دستور print(x) در بلوک try یک استثنا ایجاد می‌کند چون x تعریف نشده است. در نتیجه بلوک except اجرا می‌شود و پیام "An exception occurred" چاپ می‌کند.

با استفاده از دستور try-except ما می‌توانیم استثناها را بگیریم و رفتار مناسبی برای هندل کردن آنها تعریف کنیم تا برنامه متوقف نشود.
بدون بلوک try-except، دستور print(x) مستقیماً یک خطا ایجاد می‌کند چون x تعریف نشده است:


print(x)


خروجی:


Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined


همانطور که مشاهده می‌کنید، یک خطای NameError رخ می‌دهد چون متغیر x تعریف نشده است. این خطا باعث می‌شود برنامه متوقف شود.

اما اگر همین دستور را در بلوک try قرار دهیم، بلوک except اجرا می‌شود و پیام خطا را چاپ می‌کند. بنابراین ادامه برنامه اجرا می‌شود:


try:
print(x)
except:
print("An exception occurred")


خروجی:


An exception occurred


با استفاده از try-except می‌توانیم خطاها را بگیریم و از خراب شدن برنامه جلوگیری کنیم.