استفاده از shutil برای کپی و حذف فایل‌ها و دایرکتوری‌ها در پایتون

استفاده از shutil برای کپی و حذف فایل‌ها و دایرکتوری‌ها در پایتون

ماژول shutil در پایتون ابزاری قدرتمند برای انجام عملیات سطح بالا بر روی فایل‌ها و دایرکتوری‌ها است. این ماژول توابعی را ارائه می‌دهد که کپی کردن، حذف کردن، تغییر نام و آرشیو کردن فایل‌ها و دایرکتوری‌ها را آسان می‌کند. در این مقاله، به بررسی جامع استفاده از ماژول shutil برای کپی و حذف فایل‌ها و دایرکتوری‌ها خواهیم پرداخت. این آموزش در دسته بندی ‘مبانی پایتون’ قرار می‌گیرد و برای مبتدیان و کسانی که به دنبال یادگیری عملیات فایل در پایتون هستند، مفید خواهد بود.

مقدمه‌ای بر ماژول shutil

shutil مخفف “shell utilities” است و هدف آن ارائه توابعی مشابه ابزارهای خط فرمان یونیکس برای مدیریت فایل‌ها است. این ماژول بر پایه ماژول os ساخته شده است، اما توابع سطح بالاتری را ارائه می‌دهد که استفاده از آن‌ها را ساده‌تر می‌کند. برای استفاده از ماژول shutil، ابتدا باید آن را با استفاده از دستور import shutil وارد کنید.

کپی کردن فایل‌ها با shutil

یکی از رایج‌ترین کاربردهای ماژول shutil، کپی کردن فایل‌ها است. تابع shutil.copy(src, dst) یک فایل را از منبع (src) به مقصد (dst) کپی می‌کند. این تابع فقط محتوای فایل را کپی می‌کند و اطلاعات مربوط به مجوزها و زمان دسترسی را کپی نمی‌کند.

تابع shutil.copy2(src, dst) نیز یک فایل را کپی می‌کند، اما علاوه بر محتوا، اطلاعات مربوط به مجوزها و زمان دسترسی را نیز حفظ می‌کند. این تابع برای کپی کردن فایل‌ها به گونه‌ای که دقیقاً مشابه فایل اصلی باشند، مناسب است.

مثال:

import shutil

# کپی کردن فایل با حفظ محتوا
shutil.copy('source.txt', 'destination.txt')

# کپی کردن فایل با حفظ محتوا و اطلاعات
shutil.copy2('source.txt', 'destination2.txt')

در این مثال، فایل source.txt به فایل destination.txt و destination2.txt کپی می‌شود.

کپی کردن دایرکتوری‌ها با shutil

برای کپی کردن یک دایرکتوری به همراه تمام محتویات آن (فایل‌ها و زیردایرکتوری‌ها)، می‌توان از تابع shutil.copytree(src, dst) استفاده کرد. این تابع یک دایرکتوری را به صورت بازگشتی کپی می‌کند.

مثال:

import shutil

# کپی کردن دایرکتوری
shutil.copytree('source_directory', 'destination_directory')

در این مثال، دایرکتوری source_directory به دایرکتوری destination_directory کپی می‌شود. اگر دایرکتوری مقصد از قبل وجود داشته باشد، یک خطا رخ می‌دهد. برای جلوگیری از این خطا، می‌توان از پارامتر ignore استفاده کرد تا فایل‌ها یا دایرکتوری‌های خاصی را در هنگام کپی کردن نادیده گرفته شوند.

حذف فایل‌ها با shutil

برای حذف یک فایل، می‌توان از تابع shutil.rmtree(path) استفاده کرد. این تابع یک فایل یا دایرکتوری را به صورت بازگشتی حذف می‌کند.

هشدار: استفاده از تابع shutil.rmtree() بسیار خطرناک است، زیرا فایل‌ها و دایرکتوری‌ها را به طور دائمی حذف می‌کند و امکان بازیابی آن‌ها وجود ندارد. قبل از استفاده از این تابع، اطمینان حاصل کنید که می‌دانید چه کاری انجام می‌دهید و از اطلاعات مهم خود پشتیبان‌گیری کرده‌اید.

مثال:

import shutil

# حذف فایل
shutil.rmtree('file_to_delete.txt')

# حذف دایرکتوری
shutil.rmtree('directory_to_delete')

در این مثال، فایل file_to_delete.txt و دایرکتوری directory_to_delete حذف می‌شوند.

حذف دایرکتوری‌های خالی با shutil

اگر فقط می‌خواهید دایرکتوری‌های خالی را حذف کنید، می‌توانید از تابع os.rmdir(path) استفاده کنید. این تابع فقط دایرکتوری‌های خالی را حذف می‌کند و اگر دایرکتوری حاوی فایل یا زیردایرکتوری باشد، یک خطا رخ می‌دهد.

مثال:

import os

# حذف دایرکتوری خالی
os.rmdir('empty_directory')

توابع کمکی دیگر در shutil

ماژول shutil توابع کمکی دیگری نیز ارائه می‌دهد که می‌توانند در مدیریت فایل‌ها مفید باشند. برخی از این توابع عبارتند از:

  • shutil.move(src, dst): یک فایل یا دایرکتوری را از منبع به مقصد منتقل می‌کند.
  • shutil.make_archive(base_name, format, root_dir): یک آرشیو از یک دایرکتوری ایجاد می‌کند.
  • shutil.unpack_archive(filename, extract_dir): یک آرشیو را استخراج می‌کند.
  • shutil.get_terminal_size(): اندازه ترمینال را برمی‌گرداند.

مدیریت خطاها در shutil

هنگام استفاده از ماژول shutil، ممکن است با خطاها مواجه شوید. برای مثال، اگر سعی کنید یک فایل را حذف کنید که مجوز دسترسی به آن را ندارید، یک خطای PermissionError رخ می‌دهد. برای مدیریت این خطاها، می‌توانید از بلوک‌های try...except استفاده کنید.

مثال:

import shutil

try:
  shutil.rmtree('file_to_delete.txt')
except FileNotFoundError:
  print('فایل مورد نظر یافت نشد.')
except PermissionError:
  print('مجوز حذف فایل وجود ندارد.')
except Exception as e:
  print(f'خطای دیگری رخ داد: {e}')

در این مثال، اگر فایل file_to_delete.txt یافت نشود، یک پیام خطا چاپ می‌شود. اگر مجوز حذف فایل وجود نداشته باشد، یک پیام خطای دیگر چاپ می‌شود. اگر خطای دیگری رخ دهد، پیام خطای عمومی چاپ می‌شود.

نکات مهم در استفاده از shutil

در اینجا چند نکته مهم در استفاده از ماژول shutil آورده شده است:

  • همیشه قبل از حذف فایل‌ها و دایرکتوری‌ها، از اطلاعات مهم خود پشتیبان‌گیری کنید.
  • هنگام استفاده از تابع shutil.rmtree()، بسیار مراقب باشید، زیرا این تابع فایل‌ها و دایرکتوری‌ها را به طور دائمی حذف می‌کند.
  • برای مدیریت خطاها، از بلوک‌های try...except استفاده کنید.
  • از توابع کمکی دیگر در ماژول shutil برای انجام عملیات پیچیده‌تر استفاده کنید.

نتیجه‌گیری

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

بدون دیدگاه

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

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