سطح مقدماتی (Beginner Level)
ماژول shutil (مخفف Shell Utilities) ابزارهایی سطح بالا برای کار با فایلها و مجموعهای از فایلها را فراهم میکند. بر خلاف ماژول os که عملیات سطح پایین سیستم عامل را انجام میدهد، shutil برای کارهایی مانند کپی کردن، جابجایی و مدیریت دایرکتوریها طراحی شده است.
۱. کپی کردن فایلها (Copying Files)
سادهترین کاربرد shutil کپی کردن فایلهاست. دو تابع اصلی copy() و copy2() برای این کار وجود دارند. تفاوت اصلی آنها در این است که copy2() تلاش میکند متادیتای فایل (مانند زمان ایجاد و دسترسی) را نیز حفظ کند.
مثال اول: کپی ساده با copy
این تابع محتوای فایل و سطح دسترسی (Permissions) را کپی میکند.
مثال دوم: کپی کامل با copy2
زمانی که میخواهید TimeStamp (تاریخ ایجاد/ویرایش) فایل اصلی حفظ شود.
۲. جابجایی و تغییر نام (Moving & Renaming)
تابع move() هم برای جابجایی فایلها بین پوشهها و هم برای تغییر نام فایلها (Rename) استفاده میشود. این تابع بسیار هوشمند است و اگر مقصد در فایلسیستم دیگری باشد، فایل را کپی و سپس حذف میکند.
مثال اول: تغییر نام فایل
مثال دوم: جابجایی به پوشه دیگر
سطح پیشرفته (Professional Level)
در سطح حرفهای، shutil ابزارهای قدرتمندی برای مدیریت درختهای دایرکتوری (Directory Trees)، فشردهسازی (Archiving) و بررسی فضای دیسک ارائه میدهد.
۱. مدیریت دایرکتوریها (Tree Operations)
کپی کردن یا حذف کردن یک پوشه که حاوی صدها فایل و زیرپوشه است، با os دشوار است، اما shutil توابع copytree و rmtree را برای این کار دارد.
مثال اول: کپی کامل یک دایرکتوری
تابع copytree کل ساختار پوشه را به مقصد جدید کپی میکند.
مثال دوم: حذف کامل و بازگشتی (rmtree)
بسیار قدرتمند و خطرناک! این تابع پوشه و تمام محتویات آن را بدون پرسش حذف میکند.
import shutil
# حذف پوشه temp و تمام فایلهای داخل آن
# ignore_errors=True باعث میشود خطاهای کوچک (مثل فایلهای در حال استفاده) نادیده گرفته شوند
shutil.rmtree("temp_folder", ignore_errors=True)
۲. فیلتر کردن هنگام کپی (Ignore Patterns)
در پروژههای واقعی، اغلب نمیخواهیم فایلهای موقت (مثل .pyc یا .tmp) را کپی کنیم. shutil.copytree آرگومانی به نام ignore میپذیرد.
مثال فنی: نادیده گرفتن فایلهای خاص
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
مثال دوم: استخراج فایل (Unpack)
import shutil
# استخراج فایل زیپ در مسیر مشخص
shutil.unpack_archive("backup_archive.zip", "extracted_folder")
۴. بررسی فضای دیسک (Disk Usage)
برای برنامههایی که لاگهای حجیم دارند یا فایل دانلود میکنند، بررسی فضای خالی حیاتی است.
