ویدیو ماژول shutil پایتون برای کار با فایل ها
مدیریت و کار با فایل ها یکی از پیچیده ترین کارها در تمام زبانهای برنامه نویسی است. ماژول shutil در کتابخانه استاندارد پایتون گنجانده شده تا کار با فایل ها را ساده کند. در این آموزش با کتابخانه Shutil در پایتون آشنا می شوید. کتابخانه shutil برای انجام عملیات های سطح بالا به روی فایل ها استفاده میشود مثل فشرده کردن یا کپی کردن فایل ها. کتابخانه shutil توابع متنوعی را در خود دارد که در این آموزش ما مهم ترین آنها را بررسی خواهیم کرد.
برای شروع کار با ماژول shutil پایتون ابتدا آن را ایمپورت کنید:
>>> import shutil
# کپی کردن فایل در پایتون
برای کپی کردن یک فایل میتوانید از تابع copyfile استفاده کنید. این تابع فقط محتویات فایل را کپی میکند و metadata را منتقل نمیکند. سنتکس تابع copy به شکل زیر است:
shutil.copyfile(source, destination, *, follow_symlinks = True)
در این تابع آرگومان source فایل مبدا است که میخواهید محتوبات آن را کپی کنید و آرگومان destination فایل مقصد است که میخواهید محتویات در آن کپی شوند. هر دو این آرگومان ها باید یک رشته کامل از مسیر باشند. به مسیری که در destination مشخص میکنید باید اجازه دسترسی داشته باشید وگرنه با پیغام خطای OSError مواجه خواهید شد. همچنین آرگومان های source و destination باید مقادیر مختلفی داشته باشند در غیر اینصورت با خطای SameFileError مواجه خواهید شد. دقت کنید که اگر destination وجود داشته باشد با محتویات جدید جایگزین خواهد شد.
مثال:
>>> shutil.copyfile('old.py', 'new.py')
در اینجا محتویات داخل فایل old.py را در فایل new.py کپی میکنیم.
اگر destination یک مقصد است میتوانید از تابع copy استفاده کنید. این تابع نیز metadata را منتقل نمیکند:
>>> shutil.copy('old.py', '/Desktop/new/')
در این حالت فایل با همان نام source در مقصد کپی خواهد شد.
اگر بخواهید هنگام کپی کردن فایل ها اطلاعات metadata را نیز منتقل کنید میتوانید از تابع copy2 استفاده کنید:
>>> shutil.copy2('old.py', 'new.py')
با استفاده از تابع copy2 اطلاعات metadata مانند زمان ایجاد شدن یا تغییر فایل ها و همچنین دسترسی ها نیز منتقل خواهند شد.
تابع دیگری که میتوانید برای کپی کردن استفاده کنید تابع copytree است که برای کپی کردن تمام دایرکتوری استفاده میشود:
>>> shutil.copytree( '/Desktop/old/', '/home/new/' )
در کد بالا تمام محتویات دایرکتوری old در دایرکتوری new کپی میشود.
# حذف دایرکتوری در پایتون
برای حذف کامل یک دایرکتوری میتوانید از تابع rmtree استفاده کنید. سینتکس این تابع به شکل زیر است:
shutil.rmtree(path, ignore_errors=False, onerror=None)
آرگومان path اشاره به دایرکتوری دارد که میخواهید به طور کامل حذف کنید. آرگومان path حتما باید به یک دایرکتوری واقعی اشاره کند و نه یک symlink. اگر آرگومان ignore_errors برابر True باشد، خطاهای ناشی از حذف ناموفق نادیده گرفته خواهند شد اما اگر False باشد خطاها توسط onerror مدیریت میشوند که باید یک فانکشن باشد و اگر onerror وجود نداشته باشد با یک خطا مواجه خواهید شد.
مثال:
>>> shutil.rmtree('/home/old/')
در کد بالا دایرکتوری old به طور کامل حذف خواهد شد.
# پیدا کردن فایل اجرایی در پایتون
تابع which از کتابخانه shutil پایتون برای پیدا کردن فایل های اجرایی استفاده میشود. سینتکس تابع which به شکل زیر است:
shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)
آرگومان cmd دستوری است که تابع which برای پیدا کردن مسیر برنامه اجرایی استفاده میکند. همچنین میتوانید با استفاده از path مسیر جستجو را محدود کنید. اگر آرگومان path وجود نداشته باشد، مسیرهایی که در os.environ وجود دارند جستجو خواهند شد.
مثلا:
>>> shutil.which("python")
'C:\\Python33\\python.EXE'
کد بالا که در ویندوز اجرا شده مسیر اصلی مفسر پایتون را نمایش میدهد.
به عنوان مثالی دیگر از دستور psql استفاده کردیم تا بتوانیم مسیر رابط دیتابیس پستگرس را پیدا کنیم:
>>> shutil.which('psql')
'/usr/bin/psql'
# انتقال و جابجایی فایل در پایتون
برای جابجایی یک فایل در پایتون میتوانید از تابع move در ماژول shutil استفاده کنید. دقت کنید که بعد از استفاده از این تابع فایل دیگر در مبدا وجود نخواهد داشت. سینتکس این تابع به شکل زیر است:
shutil.move(source, destination, copy_function=copy2)
تابع move فایلی که در مسیر source وجود دارد را به مسیر destination منتقل کرده و مسیر مقصد را برمیگرداند. اگر destination از قبل موجود بوده و یک دایرکتوری باشد فایل در درون این دایرکتوری قرار میگیرد. اگر destination از قبل موجود بوده و یک فایل باشد در این حالت source جایگزین آن خواهد شد. آرگومان copy_function تابعی است که برای کپی کردن محتویات استفاده میشود.
مثال:
shutil.move("/home/old.txt", "/Desktop/new/")
در این کد فایل old.txt به داخل دایرکتوری new منتقل خواهد شد.
ارسال نظر