خانه / آموزش‌ها / مدیریت پیشرفته فایل‌ها با Shutil

مدیریت پیشرفته فایل‌ها با Shutil

🐍 HomeOfPython
|
📅 1404/10/22

سطح مقدماتی (Beginner Level)

ماژول shutil (مخفف Shell Utilities) ابزارهایی سطح بالا برای کار با فایل‌ها و مجموعه‌ای از فایل‌ها را فراهم می‌کند. بر خلاف ماژول os که عملیات سطح پایین سیستم عامل را انجام می‌دهد، shutil برای کارهایی مانند کپی کردن، جابجایی و مدیریت دایرکتوری‌ها طراحی شده است.

۱. کپی کردن فایل‌ها (Copying Files)

ساده‌ترین کاربرد shutil کپی کردن فایل‌هاست. دو تابع اصلی copy() و copy2() برای این کار وجود دارند. تفاوت اصلی آن‌ها در این است که copy2() تلاش می‌کند متادیتای فایل (مانند زمان ایجاد و دسترسی) را نیز حفظ کند.

مثال اول: کپی ساده با copy

این تابع محتوای فایل و سطح دسترسی (Permissions) را کپی می‌کند.

Python

مثال دوم: کپی کامل با copy2

زمانی که می‌خواهید TimeStamp (تاریخ ایجاد/ویرایش) فایل اصلی حفظ شود.

Python

۲. جابجایی و تغییر نام (Moving & Renaming)

تابع move() هم برای جابجایی فایل‌ها بین پوشه‌ها و هم برای تغییر نام فایل‌ها (Rename) استفاده می‌شود. این تابع بسیار هوشمند است و اگر مقصد در فایل‌سیستم دیگری باشد، فایل را کپی و سپس حذف می‌کند.

مثال اول: تغییر نام فایل

Python

مثال دوم: جابجایی به پوشه دیگر

Python

سطح پیشرفته (Professional Level)

در سطح حرفه‌ای، shutil ابزارهای قدرتمندی برای مدیریت درخت‌های دایرکتوری (Directory Trees)، فشرده‌سازی (Archiving) و بررسی فضای دیسک ارائه می‌دهد.

۱. مدیریت دایرکتوری‌ها (Tree Operations)

کپی کردن یا حذف کردن یک پوشه که حاوی صدها فایل و زیرپوشه است، با os دشوار است، اما shutil توابع copytree و rmtree را برای این کار دارد.

مثال اول: کپی کامل یک دایرکتوری

تابع copytree کل ساختار پوشه را به مقصد جدید کپی می‌کند.

Python

مثال دوم: حذف کامل و بازگشتی (rmtree)

بسیار قدرتمند و خطرناک! این تابع پوشه و تمام محتویات آن را بدون پرسش حذف می‌کند.

python
import shutil

# حذف پوشه temp و تمام فایل‌های داخل آن
# ignore_errors=True باعث می‌شود خطاهای کوچک (مثل فایل‌های در حال استفاده) نادیده گرفته شوند
shutil.rmtree("temp_folder", ignore_errors=True)

۲. فیلتر کردن هنگام کپی (Ignore Patterns)

در پروژه‌های واقعی، اغلب نمی‌خواهیم فایل‌های موقت (مثل .pyc یا .tmp) را کپی کنیم. shutil.copytree آرگومانی به نام ignore می‌پذیرد.

مثال فنی: نادیده گرفتن فایل‌های خاص

python
import shutil

def backup_project(src, dst):
    # این دستور تمام فایل‌های .pyc و پوشه __pycache__ را هنگام کپی نادیده می‌گیرد
    shutil.copytree(
        src, 
        dst, 
        ignore=shutil.ignore_patterns('*.pyc', '__pycache__', '*.tmp')
    )

۳. کار با فایل‌های فشرده (Archiving)

ماژول shutil از توابع سطح بالایی برای ساخت فایل‌های ZIP یا TAR پشتیبانی می‌کند.

مثال اول: ساخت فایل ZIP

Python

مثال دوم: استخراج فایل (Unpack)

python
import shutil

# استخراج فایل زیپ در مسیر مشخص
shutil.unpack_archive("backup_archive.zip", "extracted_folder")

۴. بررسی فضای دیسک (Disk Usage)

برای برنامه‌هایی که لاگ‌های حجیم دارند یا فایل دانلود می‌کنند، بررسی فضای خالی حیاتی است.

Python

دیاگرام عملکرد Shutil