Kahibaro
Discord Login Register

مثال‌های کاربردی خودکارسازی

ایده کلی این بخش

در فصل «خودکارسازی با پایتون» با مفهوم خودکارسازی و چند حالت رایج آن آشنا شده‌اید (مثل کار با فایل‌ها، متن و زمان‌بندی).
در این بخش می‌خواهیم چند نمونهٔ واقعی و ساده ببینیم که می‌توانید تقریباً بلافاصله بعد از این دوره در زندگی روزمره استفاده کنید.

توجه: کدها ساده‌اند و هدف، ایده گرفتن است؛ بعداً می‌توانید آن‌ها را با چیزهایی که در فصل‌های دیگر یاد می‌گیرید حرفه‌ای‌تر کنید.


مثال ۱: مرتب‌سازی خودکار فایل‌ها در یک پوشه

فرض کنید پوشهٔ «دانلودها» پر از فایل‌های مختلف است: عکس، PDF، فایل‌های zip و …
می‌خواهیم با یک اسکریپت پایتون، این فایل‌ها را بر اساس پسوندشان در پوشه‌های جدا بریزیم.

ایده:

import os
import shutil
# مسیر پوشه‌ای که می‌خواهید مرتب شود (مثال: پوشه دانلودها)
folder_path = r"C:\Users\YourName\Downloads"
# تعریف گروه‌های پسوند
file_types = {
    "Images": [".jpg", ".jpeg", ".png", ".gif"],
    "Documents": [".pdf", ".docx", ".txt"],
    "Zips": [".zip", ".rar"],
}
# ساخت پوشه‌ها اگر وجود نداشته باشند
for folder_name in file_types.keys():
    new_folder_path = os.path.join(folder_path, folder_name)
    if not os.path.exists(new_folder_path):
        os.mkdir(new_folder_path)
# پیمایش فایل‌های پوشه
for file_name in os.listdir(folder_path):
    file_path = os.path.join(folder_path, file_name)
    # اگر خودش پوشه است، رد شو
    if os.path.isdir(file_path):
        continue
    # استخراج پسوند
    _, ext = os.path.splitext(file_name)
    # پیدا کردن پوشه مناسب برای این پسوند
    for folder_name, extensions in file_types.items():
        if ext.lower() in extensions:
            dest_path = os.path.join(folder_path, folder_name, file_name)
            print(f"در حال انتقال {file_name} به {folder_name}")
            shutil.move(file_path, dest_path)
            break

نکته‌ها:

مثال ۲: گزارش روزانهٔ اندازهٔ یک پوشه (مانیتورینگ ساده)

گاهی می‌خواهید بدانید یک پوشه (مثلاً پوشهٔ لاگ، بک‌آپ یا پروژه) هر روز چقدر بزرگ‌تر شده است.
می‌توانیم یک اسکریپت بنویسیم که:

import os
from datetime import datetime
folder_path = r"C:\Users\YourName\Projects"
log_file = "folder_size_log.txt"
def get_folder_size(path):
    total_size = 0
    for root, dirs, files in os.walk(path):
        for name in files:
            file_path = os.path.join(root, name)
            total_size += os.path.getsize(file_path)
    return total_size
size_bytes = get_folder_size(folder_path)
size_mb = size_bytes / (1024 * 1024)
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_line = f"{now} - اندازه پوشه: {size_mb:.2f} MB\n"
with open(log_file, "a", encoding="utf-8") as f:
    f.write(log_line)
print("گزارش ثبت شد:")
print(log_line)

بعداً می‌توانید این اسکریپت را با زمان‌بندی (کران، Task Scheduler و …) هر روز به‌طور خودکار اجرا کنید.


مثال ۳: جست‌وجو و جایگزینی خودکار متن در چند فایل

فرض کنید چندین فایل متنی دارید و می‌خواهید یک عبارت را در همهٔ آن‌ها عوض کنید.
مثلاً:

import os
folder_path = r"C:\Users\YourName\Texts"
old_text = "شرکت الف"
new_text = "شرکت ب"
for file_name in os.listdir(folder_path):
    if not file_name.endswith(".txt"):
        continue
    file_path = os.path.join(folder_path, file_name)
    # خواندن محتوا
    with open(file_path, "r", encoding="utf-8") as f:
        content = f.read()
    # اگر عبارت قدیمی در فایل نبود، رد شو
    if old_text not in content:
        continue
    # جایگزینی
    new_content = content.replace(old_text, new_text)
    # نوشتن نسخه جدید
    with open(file_path, "w", encoding="utf-8") as f:
        f.write(new_content)
    print(f"متن در فایل {file_name} به‌روزرسانی شد.")

پیش از اجرای چنین اسکریپتی:

مثال ۴: ساخت گزارش ساده از یک فایل CSV

در دنیای واقعی، خیلی چیزها در قالب CSV ذخیره می‌شوند (خروجی اکسل، گزارش‌ها، لاگ‌ها و …).
در این مثال:

فرض کنید فایل scores.csv این شکلی است:

name,score
Ali,17
Sara,19
Reza,14
Mina,20

کد:

import csv
csv_file = "scores.csv"
report_file = "scores_report.txt"
scores = []
with open(csv_file, "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        score = float(row["score"])
        scores.append(score)
if not scores:
    print("هیچ نمره‌ای پیدا نشد.")
else:
    avg_score = sum(scores) / len(scores)
    max_score = max(scores)
    min_score = min(scores)
    report = []
    report.append(f"تعداد دانش‌آموزان: {len(scores)}")
    report.append(f"میانگین نمره: {avg_score:.2f}")
    report.append(f"بیشترین نمره: {max_score}")
    report.append(f"کمترین نمره: {min_score}")
    report_text = "\n".join(report)
    with open(report_file, "w", encoding="utf-8") as f:
        f.write(report_text)
    print("گزارش تولید شد:")
    print(report_text)

بعداً می‌توانید:

مثال ۵: تبدیل خودکار نام فایل‌ها (Batch Rename)

خیلی وقت‌ها نیاز دارید تعداد زیادی فایل را یک‌جا تغییر نام بدهید؛
مثلاً:

نمونه: اضافه کردن پیشوند به همهٔ فایل‌های یک پوشه.

import os
folder_path = r"C:\Users\YourName\Photos"
prefix = "trip_"
for file_name in os.listdir(folder_path):
    old_path = os.path.join(folder_path, file_name)
    if os.path.isdir(old_path):
        continue
    new_name = prefix + file_name
    new_path = os.path.join(folder_path, new_name)
    print(f"{file_name} -> {new_name}")
    os.rename(old_path, new_path)

ایده‌های تکمیلی:

مثال ۶: یادآور سادهٔ کارها در خط فرمان

می‌خواهیم برنامه‌ای بسازیم که:

فایل داده را tasks.txt فرض می‌کنیم.

import os
TASKS_FILE = "tasks.txt"
def show_tasks():
    if not os.path.exists(TASKS_FILE):
        print("هیچ کاری ثبت نشده است.")
        return
    with open(TASKS_FILE, "r", encoding="utf-8") as f:
        lines = f.readlines()
    if not lines:
        print("لیست کارها خالی است.")
        return
    print("لیست کارها:")
    for i, line in enumerate(lines, start=1):
        print(f"{i}. {line.strip()}")
def add_task(task):
    with open(TASKS_FILE, "a", encoding="utf-8") as f:
        f.write(task + "\n")
    print("کار جدید اضافه شد.")
def main():
    while True:
        print("\n1) نمایش کارها")
        print("2) افزودن کار جدید")
        print("3) خروج")
        choice = input("انتخاب شما: ").strip()
        if choice == "1":
            show_tasks()
        elif choice == "2":
            task = input("متن کار جدید را وارد کنید: ").strip()
            if task:
                add_task(task)
        elif choice == "3":
            print("خروج از برنامه.")
            break
        else:
            print("گزینه نامعتبر.")
if __name__ == "__main__":
    main()

این برنامه خیلی ساده است، اما:

مثال ۷: دانلود خودکار چند فایل از روی وب (سطح پایه)

برای کارهای واقعی خودکارسازی، گاهی لازم است چند فایل را از آدرس‌های اینترنتی مشخص دانلود کنید؛
مثلاً:

در این مثال از ماژول requests استفاده می‌کنیم که باید با pip نصب شود (در فصل کتابخانه‌ها دیده‌اید):

# نصب:
# pip install requests

کد:

import os
import requests
download_folder = "downloads"
os.makedirs(download_folder, exist_ok=True)
urls = [
    "https://example.com/file1.txt",
    "https://example.com/file2.txt",
]
for url in urls:
    file_name = url.split("/")[-1]
    file_path = os.path.join(download_folder, file_name)
    print(f"در حال دانلود {url} ...")
    response = requests.get(url)
    if response.status_code == 200:
        with open(file_path, "wb") as f:
            f.write(response.content)
        print(f"ذخیره شد در {file_path}")
    else:
        print(f"دانلود ناموفق برای {url} (کد وضعیت: {response.status_code})")

نکته:

چگونه از این مثال‌ها بیشترین استفاده را ببریم؟

برای اینکه این مثال‌ها واقعاً به دردتان بخورند:

  1. هر مثال را برای مشکل واقعی خودتان شخصی‌سازی کنید.
    • مسیر پوشه‌ها، نام فایل‌ها، متن‌ها و … را تغییر دهید.
  2. اسکریپت‌ها را قدم‌به‌قدم بسازید.
    • اول فقط چاپ (print) کنید که چه کاری قرار است انجام شود.
    • بعد که مطمئن شدید، بخش‌های حساس مثل os.rename, shutil.move, write را فعال کنید.
  3. چند مثال را با هم ترکیب کنید.
    • مثلاً:
      • دانلود چند فایل (مثال ۷) + مرتب‌سازی در پوشه (مثال ۱) + گزارش حجم (مثال ۲).
  4. ایده‌های خودتان را بنویسید.
    هر وقت کاری را بیش از یک یا دو بار تکراری انجام می‌دهید، از خود بپرسید:
    $$ \text{"آیا می‌توانم این را با پایتون خودکار کنم؟"} $$

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

Views: 6

Comments

Please login to add a comment.

Don't have an account? Register now!