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

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

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
پایتون برای کارهای روزمره سیستم‌عامل 🧰

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

با یک اسکریپت ساده پایتون می‌شه این کارها رو اتومات کرد. ایده‌ی کلی اینه: از ماژول‌های استاندارد مثل os و pathlib و shutil استفاده می‌کنیم تا بدون نیاز به هیچ کتابخونه اضافی، فولدرهامون رو مرتب کنیم.

یکی از آموزش‌های خوب برای شروع این فاز، بخش "File and Directory Access" توی مستندات رسمی پایتونه:
pathlib – Object-oriented filesystem paths

اینجا یک مثال واقعی: اسکریپتی که یک فولدر رو اسکن می‌کنه و فایل‌ها رو بر اساس پسوند، توی زیر‌فولدرهای جدا می‌ریزه (مثلا images، videos، documents). این دقیقا چیزی‌ه که تو خیلی از اسکریپت‌های مدیریت دانلود استفاده می‌شه.

from pathlib import Path
import shutil

BASE_DIR = Path.home() / "Downloads"

EXT_MAP = {
"images": [".png", ".jpg", ".jpeg", ".gif"],
"videos": [".mp4", ".mkv", ".avi"],
"documents": [".pdf", ".docx", ".xlsx", ".pptx"],
"archives": [".zip", ".rar", ".tar", ".gz"],
}

def get_category(ext: str) -> str | None:
ext = ext.lower()
for category, exts in EXT_MAP.items():
if ext in exts:
return category
return None

for item in BASE_DIR.iterdir():
if not item.is_file():
continue

category = get_category(item.suffix)
if not category:
continue

target_dir = BASE_DIR / category
target_dir.mkdir(exist_ok=True)

target_path = target_dir / item.name
print(f"Moving {item.name} -> {target_path}")
shutil.move(str(item), str(target_path))


چند نکته‌ی کاربردی:

🔹 استفاده از Pathlib خیلی خواناتر از کار با os.path و رشته‌های خامه. کار با مسیرها رو شبیه Objectها می‌کنه.

🔹 قبل از اجرای اسکریپت روی فولدر اصلی، بهتره روی یک فولدر تست امتحان بشه تا مطمئن باشی چیزی اشتباه جابه‌جا نمی‌شه.

🔹 می‌شه این ایده رو گسترش داد: مثلا فایل‌های قدیمی‌تر از ۳۰ روز رو ببری داخل یک فولدر old یا لاگ‌های بالای یک حجم مشخص رو پاک کنی. همه‌ش با همین ماژول‌های استاندارد قابل انجامه.

مستندات رسمی پایتون برای کار با فایل‌سیستم خیلی تمیز و قابل اتکا هستن؛ هر وقت خواستی اسکریپت رو حرفه‌ای‌تر کنی، سر زدن به این صفحه‌ها واقعا کمک می‌کنه:
shutil – High-level file operations

یک بار این اسکریپت رو روی فولدر Downloads خودت اجرا کن، اگر مفید بود، تو پروژه‌های دیگه‌ات هم از همین الگو استفاده کن و با بقیه پایتونیست‌ها به اشتراک بذار 🚀

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

👤 Developix

💎 Channel: @DevelopixPython
👍43
📌 امروز یک اسکریپت کاملاً کاربردی می‌سازیم: اسکن یک پوشه، پیدا کردن فایل‌ها، و خروجی گرفتن یک گزارش CSV با Python.

سناریو واقعی 👇
فرض کن روی سرور یا سیستم خودت هزاران فایل داری و می‌خواهی:
- اسم همه‌ی فایل‌ها
- سایز هر فایل
- تاریخ آخرین تغییر
رو به‌صورت یک گزارش تمیز در یک فایل CSV داشته باشی تا بعداً با Excel یا pandas تحلیلش کنی.

این کار را با ماژول‌های استاندارد os و pathlib و csv انجام می‌دهیم، کاملاً بدون وابستگی خارجی. برای جزئیات بیشتر هم می‌شود به مستندات رسمی Python سر زد:
os
pathlib
csv

💡 ایده کلی
یک مسیر ورودی می‌گیریم (مثلاً یک پوشه پروژه، یا فولدر logs سرور)، روی کل زیرپوشه‌ها loop می‌زنیم، اطلاعات هر فایل را می‌خوانیم و در یک فایل report.csv ذخیره می‌کنیم.

نمونه کد کامل:
import os
from pathlib import Path
import csv
from datetime import datetime


def scan_directory(root_dir: str, output_csv: str = "report.csv") -> None:
root_path = Path(root_dir).expanduser().resolve()

if not root_path.exists() or not root_path.is_dir():
raise ValueError(f"مسیر نامعتبر است: {root_path}")

rows = []
for dirpath, dirnames, filenames in os.walk(root_path):
for name in filenames:
file_path = Path(dirpath) / name
stat = file_path.stat()
size_bytes = stat.st_size
mtime = datetime.fromtimestamp(stat.st_mtime)

rows.append({
"path": str(file_path),
"size_bytes": size_bytes,
"modified_at": mtime.isoformat(timespec="seconds"),
})

with open(output_csv, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["path", "size_bytes", "modified_at"])
writer.writeheader()
writer.writerows(rows)

print(f"گزارش ساخته شد: {output_csv} ({len(rows)} فایل)")


if __name__ == "__main__":
# مثال: اسکن پوشه جاری
scan_directory(".")


نکته‌ها و کاربردهای واقعی 🔍
- این اسکریپت روی هر سیستم دارای Python 3 اجرا می‌شود، بدون نصب پکیج اضافه.
- خروجی report.csv را می‌توانی مستقیم با pandas بخوانی و روی آن تحلیل اندازه فایل‌ها، پیدا کردن فایل‌های خیلی بزرگ، یا مانیتور کردن growth یک فولدر انجام بدهی.
- برای مسیرهای حجیم، بهتر است روی دیسک‌های شبکه‌ای کمی حوصله داشته باشی؛ os.walk همه چیز را می‌گردد.

یک بار روی پوشه پروژه‌ات اجرا کن، نتیجه‌اش معمولاً شگفت‌انگیز است 🤓
اگر مفید بود، برای بقیه پایتونیست‌ها هم بفرست تا آن‌ها هم از این اسکریپت ساده اما کاربردی استفاده کنند.

🔖 #Python #پایتون #Python #Automation #Filesystem #Script #CSV #pandas

👤 Developix

💎 Channel: @DevelopixPython
👍7👎32
خیلی وقت‌ها پوشه 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