وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

روش کپی کردن فایل ها در پایتون

0 139
زمان لازم برای مطالعه: 5 دقیقه


معرفی

چه در حال خواندن داده‌ها از فایل‌ها یا نوشتن داده‌ها در فایل‌ها باشید، درک عملیات فایل مهم است. در پایتون و زبان های دیگر، ما اغلب نیاز داریم که فایل ها را از یک دایرکتوری به پوشه دیگر یا حتی در همان دایرکتوری کپی کنیم. این مقاله شما را در این زمینه راهنمایی می کند process کپی کردن فایل ها در پایتون با استفاده از ماژول ها و روش های مختلف

سیستم فایل پایتون و عملیات فایل

پایتون چندین ماژول و توابع داخلی را برای تعامل با سیستم فایل و انجام عملیات فایل فراهم می کند. دو ماژول پرکاربرد برای عملیات فایل عبارتند از os و shutil ماژول ها

این os ماژول راهی برای استفاده از عملکرد وابسته به سیستم عامل ارائه می دهد. این شامل توابعی برای تعامل با فایل سیستم است، مانند os.rename()، os.remove()، os.mkdir()، و غیره.

import os


os.rename('old_name.txt', 'new_name.txt')


os.remove('file_to_remove.txt')


os.mkdir('new_directory')

این shutil ماژول تعدادی عملیات سطح بالا را روی فایل ها و مجموعه فایل ها ارائه می دهد. تحت ماژول های ابزار استاندارد پایتون قرار می گیرد. این ماژول به خودکارسازی کمک می کند process کپی و حذف فایل ها و دایرکتوری ها

import shutil


shutil.copy('source.txt', 'destination.txt')


shutil.rmtree('directory_to_remove')

توجه داشته باشید: در حالی که os توابع ماژول برای عملیات ساده فایل، برای عملیات فایل های سطح بالاتر مانند کپی یا انتقال فایل ها و دایرکتوری ها کارآمد هستند. shutil توابع ماژول راحت تر هستند.

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

روش کپی کردن فایل ها در پایتون

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

با استفاده از shutil ماژول برای کپی کردن فایل ها

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

برای کپی کردن یک فایل در پایتون با استفاده از shutil ماژول، ما از shutil.copy() تابع. این تابع دو پارامتر دارد: مسیر فایل مبدا و مسیر مقصد.

پیشنهاد می‌کنیم بخوانید:  سه راه برای ایجاد رشته های چند خطی در پایتون

بیایید به یک مثال نگاه کنیم:

import shutil

source = "/path/to/source/file.txt"
destination = "/path/to/destination/file.txt"

shutil.copy(source, destination)

در این قطعه کد، ابتدا کد را وارد می کنیم shutil مدول. سپس مسیر فایل مبدا و مقصد را تعریف می کنیم. در نهایت، ما به shutil.copy() تابع با مبدا و مقصد به عنوان آرگومان.

توجه داشته باشید: این shutil.copy() عملکرد خواهد شد بازنویسی فایل مقصد اگر از قبل وجود داشته باشد. بنابراین، هنگام استفاده از آن احتیاط کنید!

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

import shutil

source = "/path/to/source/file.txt"
destination = "/path/to/destination/file.txt"

shutil.copy2(source, destination)

با استفاده از سیستم عامل ماژول برای کپی کردن فایل ها

پایتون داخلی os ماژول یکی دیگر از ابزارهای عالی برای تعامل با سیستم عامل است. در میان بسیاری از ویژگی های آن، و درست مانند shutil، به ما امکان کپی فایل ها را می دهد. با این حال، توجه به این نکته ضروری است که os ماژول روش مستقیمی را برای کپی کردن فایل هایی مانند shutil میکند. در عوض، ما می توانیم استفاده کنیم os.system() تابعی برای اجرای دستورات پوسته در اسکریپت پایتون ما.

در اینجا روش استفاده از آن آمده است os.system() عملکرد کپی کردن یک فایل:

import os


src = "/path/to/source/file.txt"
dest = "/path/to/destination/file.txt"


os.system(f'cp {src} {dest}')

پس از اجرای این اسکریپت، آن را خواهید یافت file.txt از مسیر مبدا به مسیر مقصد کپی شده است.

صبر کن! از آنجا که os.system() تابع می تواند هر فرمان پوسته ای را اجرا کند، همچنین در صورت سوء استفاده می تواند یک خطر امنیتی بالقوه باشد، بنابراین همیشه هنگام استفاده از آن مراقب باشید.

این ممکن است یک راه مفید برای کپی کردن فایل ها باشد، اگر شما همچنین نیاز به اجرای دستورات پوسته دیگر یا استفاده از آن دارید cp پرچم هایی که با آنها در دسترس نیست shutilروش های

کپی کردن فایل ها با Wildcards

در موارد استفاده دیگر، ممکن است بخواهید چندین فایل را همزمان کپی کنید. فرض کنید می خواهیم همه را کپی کنیم .txt فایل ها در یک دایرکتوری ما می توانیم با استفاده از wildcard (*) در مسیرهای فایل ما. این glob ماژول در پایتون را می توان برای یافتن تمام نام مسیرهایی که با یک الگوی مشخص مطابق با قوانین استفاده شده توسط پوسته یونیکس مطابقت دارند، استفاده کرد.

در اینجا روش استفاده از آن است glob ماژول برای کپی کردن همه .txt فایل ها از یک دایرکتوری به پوشه دیگر:

import glob
import shutil


src_dir = "/path/to/source/directory/*.txt"
dest_dir = "/path/to/destination/directory/"


txt_files = glob.glob(src_dir)


for file in txt_files:
    shutil.copy(file, dest_dir)

در این کد از glob برای دریافت لیستی از تمام فایل های متنی در فهرست منبع خود، که سپس آن ها را تکرار کرده و هر کدام را جداگانه کپی می کنیم.

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

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

کپی کردن دایرکتوری ها در پایتون

همانطور که دیدیم، کپی کردن فایل های فردی در پایتون کاملاً ساده است. اما اگر بخواهید کل دایرکتوری را کپی کنید چه؟ در حالی که پیچیده تر به نظر می رسد، در واقع انجام این کار با آن بسیار آسان است shutil مدول. این copytree() تابع به شما این امکان را می دهد که دایرکتوری ها را به همراه تمام فایل ها و زیر شاخه های موجود در آنها کپی کنید.

import shutil

shutil.copytree('/path/to/source_directory', '/path/to/destination_directory')

با این کار کل دایرکتوری در مسیر مبدا به مسیر مقصد کپی می شود. اگر دایرکتوری مقصد وجود نداشته باشد، copytree() آن را ایجاد خواهد کرد.

توجه داشته باشید: اگر فهرست مقصد از قبل وجود داشته باشد، copytree() الف را مطرح خواهد کرد FileExistsError. برای جلوگیری از این امر، قبل از اجرای تابع مطمئن شوید که دایرکتوری مقصد وجود ندارد.

مدیریت خطا و انواع خطاها

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

شما می توانید این خطاها را با استفاده از پایتون مدیریت کنید try/except بلوک هایی مانند این:

import shutil

try:
    shutil.copy2('/path/to/source_file', '/path/to/destination_file')
except FileNotFoundError:
    print("The source or destination file was not found.")
except PermissionError:
    print("You don't have permission to access the source or destination file.")
except IsADirectoryError:
    print("The source or destination path you provided is a directory, not a file.")

در این مثال، ما از shutil.copy2() عملکرد کپی کردن یک فایل اگر فایل مبدأ یا مقصد وجود نداشته باشد، الف FileNotFoundError ظهور کرده. اگر کاربر مجوزهای لازم را ندارد، الف PermissionError ظهور کرده. اگر مسیر مبدا یا مقصد به جای فایل، یک دایرکتوری باشد، an IsADirectoryError ظهور کرده. گرفتن هر خطا به این روش به شما امکان می دهد هر مورد را به روش مناسب مدیریت کنید.

نتیجه

در این مقاله راه های مختلف برای کپی فایل ها در پایتون را نشان داده ایم. دیدیم که چگونه پایتون تعبیه شده است shutil و os ماژول ها ابزارهای ساده و قدرتمندی را برای کپی کردن فایل در اختیار ما قرار می دهند. ما همچنین روش استفاده از حروف عام برای کپی کردن چندین فایل و روش کپی کردن کل دایرکتوری ها را نشان دادیم.

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

(برچسب‌ها به ترجمه)# python



منتشر شده در 1402-12-27 17:37:05

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید