کپی فایل در پایتون با استفاده از ()shutil.copy و ()shutil.copystat
پایتون توابع داخلی برای کپی برداری آسان از فایل ها با استفاده از Shell System Operating فراهم می کند.
دستور زیر برای کپی فایل استفاده می شود.
shutil.copy(src,dst)
دستور زیر برای کپی کردن فایل با اطلاعات MetaData استفاده می شود.
shutil.copystat(src,dst)
در اینجا مراحل کپی کردن فایل در پایتون آورده شده است.
مرحله ۱) قبل از اینکه فایل را کپی کنیم ، باید مسیر مربوط به فایل اصلی را در دایرکتوری اصلی دریافت کنیم. در کد –
۱- تعریف متغیر
۲- اعمال تابع split روی متغیر
توضیح کد
- ابتدا می خواهیم بررسی کنیم فایل “guru99.txt” وجود دارد یا خیر. از آنجا که فایل guru99.txt را قبلاً ایجاد کرده ایم ، می دانیم که وجود دارد و با بقیه ی کد ادامه خواهیم داد.
- در صورت وجود فایل ، مسیر فایل را در متغیر “src” ذخیره می کنیم.
- پس از دریافت مسیر ، قصد داریم مسیر و نام فایل را از هم جدا کنیم.
- برای این کار ، از تابع path.split در متغیر منبع استفاده می کنیم.
- هنگام اجرا ، کد “نام فایل” و “مسیر فایل” را جداگانه چاپ می کند.
مرحله ۲) از ماژول Shutil برای ایجاد یک نسخه از فایل موجود استفاده می کنیم. در اینجا یک نسخه از فایل موجود “guru99.txt” ایجاد کردیم.
توضیح کد
- نام فایل اصلی “guru99.txt” را بگیرید و در انتهای آن حروف bak. را اضافه کنید “guru99.txt.bak”. این نام با پسوند bak. کپی ما خواهد بود.
- سپس از تابع های کپی برای کپی کردن از مبدا به مقصد استفاده می کنیم.
- هنگامی که کد را اجرا کنید ، یک فایل تکراری با پسوند bak. در سمت راست پنل ایجاد می شود.
مرحله ۳) تابع کپی فقط محتوای فایل را کپی می کند اما هیچ اطلاعات دیگری ندارد. برای کپی کردن meta data مربوط به فایل ، مجوز فایل و سایر اطلاعات باید از تایع “copystat” استفاده کنید. قبل از اجرای کد ، باید فایل کپی “guru99.text.bak” را حذف کنیم.
پس از حذف فایل و اجرای برنامه ، کپی از فایل txt. ایجاد می شود اما این بار با تمام اطلاعاتی مانند مجوز فایل ، زمان اصلاح و اطلاعات meta data. برای تأیید صحت اطلاعات می توانید به shell O.S خود مراجعه کنید.
کد در زیر آورده شده است:
import os
import shutil
from os import path
def main():
# make a duplicate of an existing file
if path.exists(“guru99.txt”):
# get the path to the file in the current directory
src = path.realpath(“guru99.txt”);
#seperate the path from the filter
head, tail = path.split(src)
print(“path:” +head)
print(“file:” +tail)
#let’s make a backup copy by appending “bak” to the name
dst = src+”.bak”
# nowuse the shell to make a copy of the file
shutil.copy(src, dst)
#copy over the permissions,modification
shutil.copystat(src,dst)
if __name__==”__main__”:
main()
مرحله ۴) می توانید اطلاعات مربوط به فایل متنی را که آخرین بار تغییر یافته است دریافت کنید.
- کد خط شماره ۱۵- روز هفته، ماه، روز، سال و زمان آخرین تغییرات فایل txt). (guru99 را مشخص می کند. از ماژول path استفاده می کنیم تا جزئیات زمان اصلاح فایل را بدست آوریم و سپس از تابع time کلاس ctime استفاده می کنیم تا آن را به زمان قابل خواندن تبدیل کنیم. بنابراین وقتی کد را اجرا می کنیم ، می بینیم فایل guru99.txt آخرین بار در دوشنبه ، ۸ ژانویه در ساعت ۱۳:۳۵ سال ۲۰۱۸ تغییر یافته است.
- کد خط شماره ۱۷- همان کار را می کند و اطلاعات مربوط به تغییرات فایل را ارائه می دهد ، اما برای نمایش آن فرمت دیگری دارد. در اینجا از تابع Get Modification Time path.getmtime (“guru99.txt”) استفاده می کنیم. اکنون به جای استفاده از تابع ctime می خواهیم از تابع From Time Stamp استفاده کنیم و قصد داریم یک شی زمان تاریخ را بسازیم. در خروجی ، می توانید جزئیات زمان تغییر فایل را با فرمت های مختلف ۲۰۱۸-۰۱-۰۸, ۱۳:۳۵:۵۱٫۳۳۴۰۷۲ چاپ کنید.
کد کامل:
#
# Example file for working with o.s path module
import os
from os import path
import datetime
from datetime import date, time, timedelta
import time
def main():
# Get the modification time
t = time.ctime(path.getmtime(“guru99.txt.bak”))
print(t)
print(datetime.datetime.fromtimestamp(path.getmtime(“guru99.txt.bak”)))
if __name__ == “__main__”:
main()
خلاصه
- برای ایجاد یک نسخه کپی از فایل موجود از کد (shutil.copy (src, dst استفاده می شود.
- برای کپی کردن کلیه اطلاعات فایل اصلی در فایل کپی شده مانند مجوز فایل ، زمان اصلاح یا اطلاعات متا داده ها از کد (shutil.copystat (src ,dst استفاده می شود.
سلام ایا امکانش هست ک مصلا یک فایل اجرای اجرا بشه و یک کپی از خودش ک درحال اجا هست بگیره و بعد انتقالش بده مثلا به یک پوشه عقب تر؟
پاسخ