نسخ الملف في Python: Shutil.copy()، طريقة Shutil.copystat()

⚡ ملخص ذكي

Python تستخدم وحدة shutil لنسخ الملفات. تقوم الدالة shutil.copy() بنسخ محتويات الملف، بينما تقوم الدالة shutil.copystat() بنسخ الأذونات ووقت التعديل والبيانات الوصفية أيضًا. ستتعلم هنا كلا الطريقتين من خلال مثال توضيحي خطوة بخطوة.

  • 📋 shutil.copy(): تقوم الدالة shutil.copy(src, dst) بنسخ محتويات الملف إلى وجهة جديدة.
  • 🗂️ shutil.copystat(): تقوم الدالة shutil.copystat(src, dst) أيضًا بنسخ الأذونات والوقت والبيانات الوصفية.
  • 🤖 مساعدة الذكاء الاصطناعي: تُنشئ أدوات الذكاء الاصطناعي مثل Copilot رمز النسخ الفوري على الفور.

نسخ الملف في Python

Python طرق نسخ الملفات

Python يوفر وظائف مدمجة لنسخ الملفات بسهولة باستخدام Operaتينغ المرافق نظام شل.

يتم استخدام الأمر التالي لنسخ الملف

shutil.copy(src,dst)

يُستخدم الأمر التالي لنسخ الملف مع معلومات البيانات.

shutil.copystat(src,dst)

كيفية نسخ ملف في Python

فيما يلي خطوات نسخ الملف Python باستخدام طريقة Shutil Copy():

الخطوة 1) التقط المسار الأصلي في الدليل الحالي
قبل أن نقوم بنسخ ملف، نحتاج إلى الحصول على المسار إلى الملف الأصلي في الدليل الحالي. في الكود –

  1. إعلان المتغير
  2. تطبيق وظيفة الانقسام على المتغير

انسخ ملفًا في Python

Code تفسير

  • سنقوم أولاً بالتحقق من وجود ملف "guru99.txt" الخاص بنا أم لا. وبما أننا أنشأنا ملف guru99.txt سابقًا، فنحن نعلم أنه موجود، وسنواصل العمل مع الكود
  • نقوم بتخزين مسار الملف في المتغير "SRC"إذا كان ملفك موجودًا
  • بمجرد أن نحصل على المسار، سنقوم بفصل المسار واسم الملف
  • لهذا، سوف نستخدم الانقسام path.split دالة على متغير المصدر
  • Code عند التنفيذ، يتم طباعة "اسم الملف"و"مسار الملف" بشكل منفصل

الخطوة 2) قم بإنشاء نسخة من ملفنا الحالي باستخدام وحدة Shutil
نستخدم وحدة Shutil لإنشاء نسخة من الملف الموجود. لقد اعتدنا هنا على إنشاء نسخة من ملفنا الحالي "guru99.txt".

انسخ ملفًا في Python

Code تفسير

  • خذ اسم الملف الأصلي "guru99.txt" وأضف الحروف .bak في النهاية "guru99.txt.bak". سيكون هذا الاسم ذو الامتداد .bak هو نسختنا المكررة
  • وبعد ذلك سنستخدم وظيفة النسخ الخاصة بالأداة المساعدة للنسخ من المصدر إلى الوجهة
  • عند تشغيل الكود، سترى أنه تم إنشاء ملف مكرر بامتداد .bak على الجانب الأيمن من اللوحة

الخطوة 3) انسخ البيانات الوصفية المرتبطة بالملف وأذونات الملف والمعلومات الأخرى
تقوم وظيفة النسخ بنسخ محتوى الملف فقط ولكن لا توجد معلومات أخرى. لنسخ البيانات الوصفية المرتبطة بالملف وإذن الملف والمعلومات الأخرى التي يتعين عليك استخدامها "com.copystat" وظيفة. قبل أن نقوم بتشغيل هذا الكود، علينا حذف ملف النسخة "guru99.text.bak".

انسخ ملفًا في Python

بمجرد حذف الملف وتشغيل البرنامج، سيقوم بإنشاء نسخة من ملف .txt الخاص بك ولكن هذه المرة مع جميع المعلومات مثل إذن الملف ووقت التعديل ومعلومات البيانات الوصفية. يمكنك الذهاب إلى نظام التشغيل الخاص بك للتحقق من المعلومات.

انسخ ملفًا في Python

ها هو الكود

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()

الخطوة 4) جلب المعلومات
يمكنك جلب المعلومات حول الملف النصي الذي تم تعديله مؤخرًا

انسخ ملفًا في Python

  • Code السطر رقم 15 - يوضح هذا السطر اليوم والتاريخ والشهر والسنة والوقت الذي تم فيه آخر تعديل لملف .txt (guru99). نستخدم وحدة المسار للحصول على تفاصيل وقت تعديل الملف، ثم سنستخدم... فئات الوقت ج وظيفة الوقت لتحويل ذلك إلى وقت قابل للقراءة. لذا عندما نقوم بتشغيل الكود، يمكننا أن نرى أن الملف guru99.txt تم تعديله آخر مرة في الاثنين 8 ينايرth الساعة 13:35 2018.
  • Code السطر رقم 17 - يقوم بنفس الشيء، حيث يعرض معلومات حول تعديل الملف، ولكن بتنسيق مختلف. هنا نستخدم الحصول على وظيفة وقت التعديل (path.getmtime("guru99.txt")). الآن بدلاً من استخدام وظيفة الوقت c التي سنستخدمها من وظيفة الطابع الزمني والذهاب لبناء كائن التاريخ والوقت. في الإخراج، يمكنك رؤية تفاصيل وقت تعديل الملف مطبوعة بتنسيق مختلف 2018-01-08, 13:35:51.334072

ها هو الكود

#
# 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، ثم استدعِ الدالة shutil.copy(src, dst) لنسخ محتويات الملف. استخدم الدالة shutil.copystat() لنسخ بياناته الوصفية أيضًا.

تقوم الدالة shutil.copystat(src, dst) بنسخ أذونات الملف ووقت تعديله وبياناته الوصفية إلى الوجهة، ولكن ليس محتوياته.

تقوم الدالة shutil.copy() بنسخ المحتويات والأذونات، بينما تحتفظ الدالة shutil.copy2() أيضًا بالبيانات الوصفية مثل الطوابع الزمنية. استخدم الدالة copy2() للاحتفاظ بوقت التعديل.

تقبل الدالة shutil.copy() وجهة الدليل وتقوم بنسخ الأذونات؛ بينما تحتاج الدالة shutil.copyfile() إلى مسار الملف الكامل وتقوم بنسخ المحتويات فقط.

استخدم الأمر shutil.copytree(src, dst) لنسخ مجلد كامل ومحتوياته بشكل متكرر. يجب ألا يكون المجلد الوجهة موجودًا مسبقًا.

مساعدو الذكاء الاصطناعي مثل GitHub Copilot يقومون بالإكمال التلقائي لاستدعاءات shutil.copy() و copystat() ويقترحون copy2() أو copytree() لحالتك.

نعم. تقوم الأدوات المدعومة بالذكاء الاصطناعي بإنشاء إجراءات النسخ الاحتياطي، واختيار طريقة Shutil المناسبة، وإضافة عمليات التحقق من الوجود قبل نسخ الملفات أو المجلدات.

استخدم os.path.getmtime(path) للحصول على الطابع الزمني، ثم قم بتحويله باستخدام time.ctime() أو datetime.fromtimestamp() للحصول على تاريخ قابل للقراءة.

تلخيص هذه التدوينة بـ: