| کانال توسعه‌دهندگان پایتون |
7.59K subscribers
67 photos
3 videos
4 files
63 links
⭕️ کانال توسعه‌دهندگان پایتون دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
Pandas یکی از مهم‌ترین ابزارهای Python برای کار جدی با داده‌ است؛ مخصوصاً وقتی با فایل‌های CSV، Excel، دیتابیس‌ها یا دیتاهای جدولی سروکار داری 📊

با Pandas می‌توانی:
• دیتاست‌های بزرگ را سریع فیلتر و مرتب کنی
• ستون‌ها را اضافه/حذف و تبدیل نوع انجام بدهی
• روی گروه‌ها آمار بگیری (groupby)
• به‌راحتی با NumPy و ابزارهای ML مثل scikit-learn ترکیبش کنی

نمونه استفادهٔ ساده:
pip install pandas

import pandas as pd

# خواندن فایل CSV
df = pd.read_csv("data.csv")

# انتخاب سطرهایی که مقدار ستون "age" >= 18 است
adults = df[df["age"] >= 18]

# میانگین سن
mean_age = adults["age"].mean()
print(mean_age)


برای تحلیل لاگ‌ها، دیتای مالی، گزارش‌های سیستمی یا آماده‌سازی دیتا برای مدل‌های ML، Pandas معمولاً اولین انتخاب است.

مستندات رسمی:
Docs
GitHub

امتحانش کن روی یک CSV واقعی از پروژه‌ات و کم‌کم دیتای خام را به insight تبدیل کن 🔍

🔖 #Python #پایتون #Python #Pandas #Data_Analysis #DataFrame #تحلیل_داده #پایتون

👤 Developix

💎 Channel: @DevelopixPython
9
💠 نسخه جدید کتابخانه آیوگرام (Aiogram) منتشر شده است

🔸 ارتقا از نسخه 3.28.2 به 3.29.0

🔖 #Aiogram, #bot, #python, #release

💎 @DevelopixPython
🔥3
💠 نسخه جدید کتابخانه FastAPI منتشر شده است

🔸 ارتقا از نسخه 0.136.3 به 0.137.0

🔹 لیست تغییرات این نسخه:
- تغییر داخلیِ سازگارکننده APIRouter/APIRoute برای حفظ نمونه‌ها
- امکان افزودن روت‌ها پس از include_router بدون کپی شدن مسیرها
- پشتیبانی مقدماتی از APIRouter/APIRoute سفارشی (ویژگی آزمایشی)
- به‌روزرسانی مستندات و راهنمای استقرار FastAPI Cloud
- به‌روزرسانی ترجمه‌های مستندات به چندین زبان
- به‌روزرسانی وابستگی‌ها، حامیان و تنظیمات داخلی و غیره

🔖 #fastapi, #python, #release

💎 @DevelopixPython
3👍2
💠 نسخه جدید کتابخانه FastAPI منتشر شده است

🔸 ارتقا از نسخه 0.137.2 به 0.138.0

🔹 لیست تغییرات این نسخه:
- افزودن پشتیبانی از app.frontend() و router.frontend()
- به‌روزرسانی و بهبود مستندات (تایپو، لینک‌ها و دستورالعمل‌ها)
- فعال شدن ترجمه مستندات به زبان هندی
- بهبود تست‌ها و پایدارسازی فرایند انتشار، و غیره

🔖 #fastapi, #python, #release

💎 @DevelopixPython
👍2
در کد اول، برای پردازش یک فایل بزرگ کل محتوا با read().splitlines() یک‌باره در مموری لود شده است. این کار هم ریسک Memory Error را بالا می‌برد و هم برای فایل‌های خیلی بزرگ باعث افت شدید کارایی می‌شود. در کد دوم با استفاده از یک generator و iteration تنبل (lazy) هر خط به‌صورت stream خوانده می‌شود و فقط همان لحظه در مموری قرار می‌گیرد.

در مثال بالا به جای بارگذاری یک‌جای کل فایل، می‌توانید با الگوی generator و حلقه روی file object، مصرف مموری را به‌صورت چشم‌گیر کاهش دهید و در سناریوهای پردازش فایل‌های چندصد مگابایتی یا لاگ‌فایل‌های بسیار بزرگ، هم مقیاس‌پذیری برنامه را بهتر کنید و هم سرعت شروع پردازش را افزایش دهید.

اگر در پروژه‌های Python با داده‌های حجیم (مثلاً log processing، ETL ساده یا پردازش دیتاهای متنی) سروکار دارید، استفاده از این الگو به‌جای روش eager loading می‌تواند تفاوت جدی در performance و پایداری برنامه‌تان ایجاد کند.

🔖 #Python #پایتون

👤 Developix

💎 Channel: @DevelopixPython
5👍4🔥1
💠 نسخه جدید کتابخانه FastAPI منتشر شده است

🔸 ارتقا از نسخه 0.138.1 به 0.139.0

🔹 لیست تغییرات این نسخه:
- پشتیبانی از dependencies در app.frontend()
- به‌روزرسانی ترجمه‌های چندزبانه مستندات
- به‌روزرسانی فهرست متخصصان و مشارکت‌کنندگان FastAPI
- بهبود تنظیمات مخزن‌ها و موضوعات GitHub
- به‌روزرسانی وابستگی‌ها و GitHub Actions
- سایر ریزبهبودهای داخلی و ترجمه‌ها و غیره

🔖 #fastapi, #python, #release

💎 @DevelopixPython
👍3
چرا متود copy همیشه کپی واقعی نمی‌سازه؟

یکی از باگ‌هایی که حتی برنامه‌نویس‌های با تجربه هم گاهی باهاش روبه‌رو میشن، تفاوت بین Copy و Deep Copy هست

فرض کنید این لیست رو داریم:

data = [
["Yasin", "Ali"],
["Math", "Science"]
]

حالا ازش کپی می‌گیریم:

new_data = data.copy()

خیلی‌ها فکر می‌کنن new_data کاملاً مستقل از data شده اما اینطور نیست

اگر این کار رو انجام بدیم:

new_data[0].append("Sina")

نتیجه:

print(data)

# خروجی 👇🏻
# [['Yasin', 'Ali', 'Sina'], ['Math', 'Science']]

چرا لیست اصلی هم تغییر کرد؟

چون copy() فقط لیست بیرونی رو کپی می‌کنه، ولی عناصر داخلش همچنان به همون آبجکت‌های قبلی اشاره می‌کنن.

به این میگن Shallow Copy

-——————————————--

🎈اما راه حل؟

وقتی ساختارهای تو در تو دارید با از از deepcopy استفاده کنید

from copy import deepcopy

new_data = deepcopy(data)

حالا هر تغییری روی new_data بدید روی data اثری نداره

🔴 نکته مهم 🔴

اگر داده‌های شما تو در تو نیستند، copy کاملاً کافی و سریع‌تره

اما اگر با لیست، دیکشنری یا آبجکت‌های تو در تو کار می‌کنید استفاده اشتباه از copy می‌تونه باگ‌ ایجاد کنه که وقتتون گرفته بشه

🔖 #Python #پایتون

👤 BʟᴀᴄᴋCᴀᴛ

💎 Channel: @DevelopixPython
👍93🔥1
خیلی وقت‌ها پوشه Downloads شبیه یک انباری شلوغ می‌شود؛ pdf، عکس، zip، هر چیزی قاطی هم 😅
امروز یک اسکریپت واقعی و ساده با Python می‌سازیم که فایل‌ها را بر اساس نوع، به پوشه‌های جدا منتقل کند.

ایده از این آموزش الهام گرفته شده:
Real Python - Working With Files in Python

🧠 ایده کلی

Python برای کار با فایل‌ها و مسیرها کتابخانه‌های خیلی خوبی دارد، مخصوصاً pathlib و shutil.
کاری که می‌کنیم:

- پوشه Downloads را مانیتور نمی‌کنیم، فقط هر بار اسکریپت را اجرا کنیم
- بر اساس پسوند فایل (مثلاً .pdf یا .jpg) تصمیم می‌گیریم کجا برود
- اگر پوشه مقصد وجود نداشت، خودمان می‌سازیم

این مدل اسکریپت‌ها برای مرتب‌ نگه‌داشتن سیستم شخصی یا سیستم‌های روی سرور خیلی کاربردی است.

🛠 کتابخانه‌های مورد نیاز

همه چیز با کتابخانه‌های استاندارد Python انجام می‌شود:

- pathlib برای کار راحت‌تر با مسیرها
- shutil برای جابجا کردن فایل‌ها
- os اگر خواستیم تنظیمات خاص‌تری انجام بدهیم (اینجا خیلی کم استفاده می‌شود)

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

این یک مثال ساده و عملی است. مسیر DOWNLOADS_PATH را با مسیر سیستم خودتان عوض کنید 👇

from pathlib import Path
import shutil

# مسیر پوشه Downloads را مطابق سیستم خود تنظیم کنید
DOWNLOADS_PATH = Path.home() / "Downloads"

# مپ کردن پسوندها به پوشه‌های هدف
EXTENSION_MAP = {
".pdf": "PDFs",
".jpg": "Images",
".jpeg": "Images",
".png": "Images",
".zip": "Archives",
".rar": "Archives",
".mp4": "Videos",
".mp3": "Music",
}

for item in DOWNLOADS_PATH.iterdir():
if item.is_file():
ext = item.suffix.lower()
if ext in EXTENSION_MAP:
target_dir = DOWNLOADS_PATH / EXTENSION_MAP[ext]
target_dir.mkdir(exist_ok=True)

target_path = target_dir / item.name
# اگر فایلی با همین نام هست، نام را کمی عوض می‌کنیم
if target_path.exists():
target_path = target_dir / f"{item.stem}_copy{ext}"

shutil.move(str(item), str(target_path))


نکات کوچک اما مهم

- قبل از اجرا، یک‌بار روی یک پوشه تستی امتحان شود تا مطمئن شوید مپ پسوندها را درست تعریف کرده‌اید.
- می‌توانید EXTENSION_MAP را مطابق نیاز خود بزرگ‌تر کنید (مثلاً برای فایل‌های .pptx، .csv و غیره).
- اگر با Windows کار می‌کنید و مسیر Downloads فرق دارد، از print(Path.home()) استفاده کنید تا مسیر خانه کاربر را ببینید.

چطور حرفه‌ای‌ترش کنیم؟

- اضافه کردن logging برای لاگ کردن کارهایی که روی فایل‌ها انجام می‌شود.
- ساختن یک CLI ساده با کتابخانه argparse تا بشود مسیر را از طریق command line داد.
- زمان‌بندی اجرای اسکریپت (مثلاً با Task Scheduler روی Windows یا cron روی Linux).

اگر پوشه Downloads شما همیشه شلوغ است، این اسکریپت یک نجات‌دهنده کوچک است 😄
امتحانش کنید و اگر دوست داشتید، با بقیه توسعه‌دهندگان پایتون هم به اشتراک بگذارید.

🔖 #Python #پایتون #Python #Automation #Files #pathlib #shutil #Scripting

👤 Developix

💎 Channel: @DevelopixPython
👍54
💠 نسخه جدید محیط توسعه Pycharm منتشر شده است

🔸 ارتقا از نسخه 2026.1.4 به 2026.2

🔖 #pycharm, #python, #release

💎 @DevelopixPython
👍1
💠 نسخه جدید کتابخانه FastAPI منتشر شده است

🔸 ارتقا از نسخه 0.139.2 به 0.140.0

🔹 لیست تغییرات این نسخه:
- بهینه‌سازی مصرف حافظه در مدیریت وابستگی‌ها
- افزودن مستندات جدید «Library Skills»
- به‌روزرسانی مستندات برای استفاده پیش‌فرض از uv projects
- بازسازی ساختار صفحات «FastAPI People» و حامیان
- بهبود زیرساخت CI با افزودن بنچمارک حافظه و به‌روزرسانی حامیان و …

🔖 #fastapi, #python, #release

💎 @DevelopixPython
2
🐞 دیباگ سریع با تابع داخلی breakpoint()

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

کافی است هرجا نیاز به توقف و بررسی وضعیت متغیرها بود، یک breakpoint() بگذارید تا برنامه همان‌جا متوقف شود و وارد interactive debugger (پیش‌فرض: pdb) شوید.

def process_items(items):
total = 0
for i, item in enumerate(items):
if item < 0:
breakpoint() # اینجا وضعیت را چک کن
total += item
return total

result = process_items([1, 2, -3, 4])
print(result)


داخل debugger می‌شود متغیرها را چاپ کرد، روی کد قدم‌به‌قدم رفت، و سریع منطق مشکل‌دار را پیدا کرد. بعد از رفع مشکل، فقط همان خط breakpoint() را حذف یا comment کن.

🔗 مرجع رسمی Python: docs.python.org

🔖 #Python #پایتون #Python #debugging #breakpoint #pdb #best_practices

👤 Developix

💎 Channel: @DevelopixPython
6👍1
💠 نسخه جدید کتابخانه FastAPI منتشر شده است

🔸 ارتقا از نسخه 0.140.13 به 0.141.0

🔹 لیست تغییرات این نسخه:
- افزودن app.frontend(check_dir="auto") برای توسعهٔ ساده‌تر با fastapi dev
- و بهبودهای جزئی دیگر، و غیره

🔖 #fastapi, #python, #release

💎 @DevelopixPython
💠 نسخه جدید فریمورک جنگو (Django) منتشر شده است

🔸 ارتقا از نسخه 6.0.8 به 6.1.0

🔹 لیست تغییرات این نسخه:
- رفع باگ امنیتی شدید در lookupهای مکانی
- جلوگیری از DoS در check_for_language
- محدود کردن عمق مجموعه‌های هندسی تودرتو
- ایمن‌سازی لینک‌های URLField در ادمین
- رفع کرش bulk_create روی برخی دیتابیس‌ها
- به‌روزرسانی سازگاری با sqlparse 0.5.5 و موارد دیگر

🔖 #django, #python, #release

💎 @DevelopixPython
👍2
مدیریت درست resource مثل فایل، connection دیتابیس یا lock، کلی باگ و Memory Leak بالقوه را حذف می‌کند. پایتون برای این کار Context Manager دارد که با کلمهٔ کلیدی with استفاده می‌شود. 😌

ساده‌ترین مثال، کار با فایل است؛ بدون نیاز به close() یادت نرود:
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()

بعد از تمام شدن بلاک، فایل به‌صورت خودکار بسته می‌شود؛ حتی اگر exception رخ بدهد. 👌

برای resourceهای خودت هم می‌شود Context Manager ساخت. راحت‌ترین راه در پروژه‌های کوچیک، استفاده از contextlib.contextmanager است:
from contextlib import contextmanager

@contextmanager
def temp_change_dir(path):
import os
old = os.getcwd()
os.chdir(path)
try:
yield
finally:
os.chdir(old)

حالا هرجا لازم بود، فقط:
with temp_change_dir("/tmp"):
# کدهای وابسته به مسیر جدید
...

این الگو، کد را خواناتر، امن‌تر و تست‌پذیرتر می‌کند. دفعهٔ بعد که نیاز به setup/cleanup داشتی، به یک Context Manager کوچک فکر کن.

🔗 رفرنس: Python docs - contextlib

🔖 #Python #پایتون #Python #context_manager #with #contextlib #best_practices #resources

👤 Developix

💎 Channel: @DevelopixPython
👍3
🔥 پروژه: ‏DSPy فریم‌ورک برنامه‌نویسی LLM

DSPy یه فریم‌ورک پایتونی از آزمایشگاه NLP استنفورده که کمک می‌کند با LLMها برنامه‌نویسی کنی، نه Prompt نویسی دستی 🤖

به‌جای حفظ Promptها، ماژول‌های سطح‌بالا تعریف می‌کنی (مثلاً برای Question Answering، RAG یا Summarization) و DSPy خودش Prompt و Hyperparameterها را روی داده‌ات Optimize می‌کند.

برای ساخت Pipelineهای پایدار روی GPT و مدل‌های متن‌باز، گزینهٔ خیلی جدی‌ایه. سورس‌کد و مثال‌ها:
DSPy در گیت‌هاب

⭐️ 519 stars this week

🔖 #Python #پایتون #پایتون #یادگیری_ماشین #پردازش_زبان_طبیعی