| کانال توسعه‌دهندگان پایتون |
6.47K subscribers
41 photos
2 videos
4 files
46 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
👍6👎31