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

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

مرتب‌سازی فایل‌ها یکی از وظایف رایج در مدیریت سیستم‌عامل و سازماندهی داده‌ها است. انجام این کار به صورت دستی می‌تواند زمان‌بر و خسته‌کننده باشد، به خصوص زمانی که تعداد فایل‌ها زیاد باشد. خوشبختانه، با استفاده از زبان برنامه‌نویسی پایتون و قابلیت‌های اتوماسیون آن، می‌توان اسکریپتی نوشت که این فرآیند را به طور خودکار انجام دهد. این مقاله به آموزش گام به گام ساخت چنین اسکریپتی می‌پردازد و در دسته بندی ‘اتوماسیون و اسکریپت‌نویسی’ قرار می‌گیرد.

پیش‌نیازها

برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:

  • نصب پایتون: اطمینان حاصل کنید که پایتون بر روی سیستم شما نصب شده است. می‌توانید آخرین نسخه را از وب‌سایت رسمی پایتون دریافت کنید.
  • آشنایی با مفاهیم پایه پایتون: درک مفاهیمی مانند متغیرها، حلقه‌ها، شرط‌ها و توابع ضروری است.
  • دسترسی به پوشه‌ای که می‌خواهید فایل‌های آن را مرتب‌سازی کنید.

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

قبل از شروع نوشتن کد، بهتر است برنامه‌ریزی دقیقی داشته باشیم. اسکریپت ما باید بتواند:

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

نوشتن اسکریپت پایتون

اکنون می‌توانیم شروع به نوشتن کد پایتون کنیم. در ابتدا، ماژول‌های مورد نیاز را وارد می‌کنیم:

import os
import shutil

ماژول os برای تعامل با سیستم‌عامل (مانند دسترسی به فایل‌ها و پوشه‌ها) و ماژول shutil برای انجام عملیات مربوط به فایل‌ها (مانند کپی و انتقال) استفاده می‌شوند.

تابع دریافت مسیر پوشه

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

def get_folder_path():
    folder_path = input("لطفاً مسیر پوشه مورد نظر را وارد کنید: ")
    if not os.path.isdir(folder_path):
        print("مسیر وارد شده معتبر نیست. لطفاً یک مسیر معتبر وارد کنید.")
        return get_folder_path()
    return folder_path

این تابع از کاربر می‌خواهد که مسیر پوشه را وارد کند. سپس با استفاده از تابع os.path.isdir() بررسی می‌کند که آیا مسیر وارد شده یک پوشه معتبر است یا خیر. اگر مسیر معتبر نباشد، پیام خطا نمایش داده می‌شود و تابع به صورت بازگشتی فراخوانی می‌شود تا کاربر مسیر معتبری وارد کند.

تابع مرتب‌سازی فایل‌ها بر اساس نوع

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

def sort_files_by_extension(folder_path):
    files = os.listdir(folder_path)
    for file in files:
        file_path = os.path.join(folder_path, file)
        if os.path.isfile(file_path):
            extension = file.split('.')[-1].lower()
            extension_folder = os.path.join(folder_path, extension)
            if not os.path.exists(extension_folder):
                os.makedirs(extension_folder)
            shutil.move(file_path, os.path.join(extension_folder, file))

این تابع ابتدا لیست فایل‌های موجود در پوشه را با استفاده از تابع os.listdir() به دست می‌آورد. سپس برای هر فایل، مسیر کامل آن را با استفاده از تابع os.path.join() ایجاد می‌کند. با استفاده از تابع os.path.isfile() بررسی می‌کند که آیا مورد فعلی یک فایل است یا خیر. اگر فایل باشد، پسوند فایل را با استفاده از متد split('.')[-1] استخراج می‌کند و آن را به حروف کوچک تبدیل می‌کند. سپس پوشه‌ای با نام پسوند فایل ایجاد می‌کند (اگر از قبل وجود نداشته باشد) و فایل را به آن پوشه منتقل می‌کند.

تابع مرتب‌سازی فایل‌ها بر اساس تاریخ ایجاد

برای مرتب‌سازی فایل‌ها بر اساس تاریخ ایجاد، می‌توانیم از تابع زیر استفاده کنیم:

import time

def sort_files_by_creation_date(folder_path):
    files = os.listdir(folder_path)
    for file in files:
        file_path = os.path.join(folder_path, file)
        if os.path.isfile(file_path):
            creation_time = os.path.getctime(file_path)
            date_folder = os.path.join(folder_path, time.strftime("%Y-%m-%d", time.localtime(creation_time)))
            if not os.path.exists(date_folder):
                os.makedirs(date_folder)
            shutil.move(file_path, os.path.join(date_folder, file))

این تابع مشابه تابع قبلی است، با این تفاوت که به جای پسوند فایل، از تاریخ ایجاد فایل برای ایجاد پوشه استفاده می‌کند. تابع os.path.getctime() تاریخ ایجاد فایل را به صورت timestamp برمی‌گرداند. سپس با استفاده از تابع time.strftime()، timestamp را به یک رشته با فرمت “سال-ماه-روز” تبدیل می‌کنیم.

تابع اصلی اسکریپت

در نهایت، تابع اصلی اسکریپت را می‌نویسیم که توابع قبلی را فراخوانی می‌کند:

def main():
    folder_path = get_folder_path()
    sort_option = input("نحوه مرتب‌سازی را انتخاب کنید (extension/date): ")
    if sort_option.lower() == "extension":
        sort_files_by_extension(folder_path)
        print("فایل‌ها بر اساس پسوند مرتب‌سازی شدند.")
    elif sort_option.lower() == "date":
        sort_files_by_creation_date(folder_path)
        print("فایل‌ها بر اساس تاریخ ایجاد مرتب‌سازی شدند.")
    else:
        print("گزینه مرتب‌سازی نامعتبر است.")

if __name__ == "__main__":
    main()

این تابع ابتدا مسیر پوشه را با استفاده از تابع get_folder_path() دریافت می‌کند. سپس از کاربر می‌خواهد که نحوه مرتب‌سازی را انتخاب کند (بر اساس پسوند یا تاریخ ایجاد). بر اساس انتخاب کاربر، تابع مربوطه را فراخوانی می‌کند و پیام مناسبی را نمایش می‌دهد.

اجرای اسکریپت

برای اجرای اسکریپت، آن را در یک فایل پایتون (مثلاً sort_files.py) ذخیره کنید و سپس از طریق خط فرمان با استفاده از دستور python sort_files.py آن را اجرا کنید.

نکات تکمیلی

* می‌توانید اسکریپت را با اضافه کردن قابلیت‌های دیگر (مانند مرتب‌سازی بر اساس اندازه فایل، نام فایل، یا ایجاد پوشه‌های سفارشی) گسترش دهید.
* برای مدیریت خطاها، می‌توانید از بلوک‌های try-except استفاده کنید.
* برای بهبود کارایی اسکریپت، می‌توانید از توابع و ماژول‌های بهینه‌سازی شده استفاده کنید.
* در هنگام انتقال فایل‌ها، مراقب باشید که فایل‌ها را به درستی کپی یا منتقل کنید تا از از دست رفتن داده‌ها جلوگیری شود.
* قبل از اجرای اسکریپت بر روی پوشه‌های مهم، حتماً از داده‌های خود پشتیبان‌گیری کنید.

نتیجه‌گیری

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

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *