في هذا البرنامج التعليمي، سوف نتعرف على وحدة Shutil في لغة بايثون. سنناقش كيف يمكننا إجراء عملية الملف عالي المستوى مثل إنشاء ملف نسخة جديد وأرشفته ونسخ محتوى ملف واحد إلى ملف آخر باستخدام برنامج Python النصي. دعونا نحصل على مقدمة أساسية لوحدة Shutil.
وحدة بايثون شوتيل
توفر وحدة Python Shutil إمكانية إجراء عملية ملف عالية المستوى. يمكنه العمل مع كائن الملف ويوفر لنا القدرة على نسخ الملفات وإزالتها. إنه يتعامل مع الدلالات ذات المستوى المنخفض مثل إنشاء وإغلاق كائنات الملف بعد تنفيذ جميع العمليات.
عمل وحدة Shutil
تأتي وحدة Python Shutil مع العديد من الطرق المضمنة. سوف نستكشف بعض الطرق المهمة. لبدء العمل مع هذه الوحدة، نحتاج أولاً إلى استيرادها في ملف Python الحالي الخاص بنا.
نسخ الملفات
توفر هذه الوحدة ينسخ() وظيفة تستخدم لنسخ البيانات من ملف إلى آخر. يجب أن تكون الملفات في نفس الدليل ويجب أن يكون الملف الوجهة قابلاً للكتابة. دعونا نفهم بناء الجملة التالي.
بناء الجملة-
shutil.copyfile(source, destination, *, follow_symlinks = True)
معامل:
في بناء الجملة أعلاه -
- الوسيطة الأولى هي المصدر الذي يوضح مسار الملف المصدر.
- الوسيطة الثانية هي الوجهة التي توضح مسار الملف الوجهة.
- الوسيطة الثالثة اختيارية؛ القيمة الافتراضية لهذه المعلمة صحيحة.
- تقوم بإرجاع سلسلة توضح مسار الملف الذي تم إنشاؤه حديثًا.
دعونا نفهم المثال التالي.
مثال -
import os import shutil # Creating a new folder in the current directory os.mkdir('javatpoint') # It will show the empty folder print('Empty Folder:', os.listdir('javatpoint')) # testcompare.py file will be copied in the javatpoint folder shutil.copy('testcompare.py', 'javatpoint') # After coping the file folder shows the file print('File Copied Name:', os.listdir('javatpoint'))
انتاج:
Empty Folder: [] File Copied Name: ['testcompare.py']
توضيح -
تأخذ الدالة Copy() اسم الدليل كوسيطة. هنا البيانات الوصفية إذا لم يتم نسخه، فسيتم اعتبار الملف المنسوخ بمثابة الملف الذي تم إنشاؤه حديثًا. قامت هذه الطريقة أيضًا باستنساخ جميع الأذونات الخاصة بالملف. شيء واحد يجب ملاحظته هو أنه إذا كان الملف الوجهة موجودًا بالفعل، فسيتم استبداله بالملف المصدر.
دعونا نرى مثالا آخر.
مثال - 2 إذا كانت الوجهة عبارة عن دليل
import os import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' # In the newly created foloder destination = r'D:Python ProjectNewFile' # Storing the new path of hello.txt file dest = shutil.copy(source, destination) # Print the new path print(dest)
انتاج:
D:Python ProjectNewFilehello.txt
كما ذكرنا، فإن وظيفة Copy() لا تقوم بنسخ البيانات الوصفية. ولكن، سوف نستخدم نسخة 2 () الوظيفة التي تسمح لنا بنسخ الملف بما في ذلك البيانات الوصفية الخاصة به.
مثال - 3: معالجة الخطأ أثناء استخدام طريقة النسخ
# importing shutil module import shutil # It is a source path source = r'D:Python ProjectNewFolder' # It is a destination path destination = r'D:Python ProjectNewFolder' try: shutil.copy(source, destination) print('File copied successfully.') # If the given source and path are same except shutil.SameFileError: print('Source and destination represents the same file.') # If there is no permission to write except PermissionError: print('Permission denied.') # For other errors except: print('Error occurred while copying file.')
انتاج:
Source and destination represents the same file.
وظيفة Copy2()
هذه الوظيفة مشابهة لـ ينسخ() وظيفة. يمكنه أيضًا نسخ محتوى ملف إلى آخر ولكن الاختلاف الوحيد هو أنه يمكنه الحفاظ على البيانات التعريفية للملف. دعونا نفهم بناء الجملة التالي.
بناء الجملة:
shutil.copy2(source, destination, *, follow_symlinks = True)
معامل:
في بناء الجملة أعلاه -
10 مل إلى أوقية
- الوسيطة الأولى هي المصدر الذي يوضح مسار الملف المصدر.
- الوسيطة الثانية هي الوجهة التي توضح مسار الملف الوجهة.
- الوسيطة الثالثة اختيارية؛ القيمة الافتراضية لهذه المعلمة صحيحة.
- تقوم بإرجاع سلسلة توضح مسار الملف الذي تم إنشاؤه حديثًا.
دعونا نفهم المثال التالي.
مثال -
import os import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' metadata = os.stat(source) print(metadata) # In the newly created foloder destination = r'D:Python ProjectNewFile' # Storing the new path of hello.txt file dest1 = shutil.copy2(source, destination) metadata = os.stat(dest1) print('After copying file') print(metadata) # Print the new path print(dest1)
انتاج:
os.stat_result(st_mode=33206, st_ino=562949953459285, st_dev=3029671014, st_nlink=1, st_uid=0, st_gid=0, st_size=17, st_atime=1622815671, st_mtime=1622705607, st_ctime=1622705607) After copying file os.stat_result(st_mode=33206, st_ino=562949953459287, st_dev=3029671014, st_nlink=1, st_uid=0, st_gid=0, st_size=17, st_atime=1622815748, st_mtime=1622705607, st_ctime=1622706243) D:Python ProjectNewFilehello.txt
وظيفة Shutil.copyfile()
تُستخدم هذه الطريقة لنسخ محتوى الملف المصدر إلى الملف الوجهة باستثناء البيانات التعريفية. يجب أن يكون لدى المصدر والوجهة ملف ويجب أن يوفر ملف الوجهة إذن الكتابة. إذا كان هناك ملف وجهة موجود بالفعل، فسيتم استبداله بالملف الجديد وإلا قم بإنشاء ملف جديد.
دعونا نرى بناء الجملة التالي.
بناء الجملة:
shutil.copyfile(source, destination, *, follow_symlinks = True)
حدود:
في بناء الجملة أعلاه -
- الوسيطة الأولى هي المصدر الذي يوضح مسار الملف المصدر.
- الوسيطة الثانية هي الوجهة التي توضح مسار الملف الوجهة.
- الوسيطة الثالثة اختيارية؛ القيمة الافتراضية لهذه المعلمة صحيحة.
- تقوم بإرجاع سلسلة توضح مسار الملف الذي تم إنشاؤه حديثًا.
دعونا نفهم المثال التالي.
مثال -
import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' # In the newly created foloder destination = r'D:Python ProjectNewFilehi.txt' # Storing the new path of hello.txt file dest1 = shutil.copyfile(source, destination) # Print the new path print(dest1)
انتاج:
D:Python ProjectNewFilehi.txt
وظيفة Shutil.copytree()
يتم استخدام هذه الطريقة لنسخ الدليل الكامل. يقوم بنسخ شجرة الدليل بأكملها المتجذرة في المصدر إلى الدليل الوجهة. يجب ألا يكون دليل الوجهة موجودًا بالفعل. دعونا نرى بناء الجملة التالي.
بناء الجملة:
shutil.copytree(src, dst, symlinks = False, ignore = None, copy_function = copy2, igonre_dangling_symlinks = False)
حدود:
في بناء الجملة أعلاه:
- تقوم بإرجاع السلسلة التي تمثل مسار الدليل المنشأ حديثًا.
مثال -
# importing shutil module import shutil # It is source path src = r'D:Python Projectjavatpoint' # It is destination path dest = r'D:Python ProjectNewFolder' # Copy the content of # source to destination dest1 = shutil.copytree(src, dest) # Now we print path of newly # created file print('Destination path:', dest1)
انتاج:
Destination path: D:Python ProjectNewFolder
Shutil.rmtree()
يتم استخدام هذه الطريقة لحذف شجرة الدليل الكاملة. دعونا نرى بناء الجملة التالي.
بناء الجملة:
shutil.rmtree(path, ignore_errors=False, onerror=None)
معامل-
في بناء الجملة أعلاه -
دعونا نفهم المثال التالي -
مثال -
import shutil import os # location location_dir = r'D:Python ProjectNewFile' # directory directory = r'D:Python Projectjavatpoint' # path path1 = os.path.join(location_dir, directory) # removing directory shutil.rmtree(path1)
سيقوم الكود أعلاه بإزالة الدليل المحدد.
الدالة Shutil.what()
ال Shutil.what() يتم استخدام الدالة للحصول على مسار التطبيق القابل للتنفيذ الذي سيتم تشغيله إذا تم استدعاء cmd المحدد. يجد الملف في المسار المحدد. دعونا نرى بناء الجملة التالي.
بناء الجملة:
shutil.which(cmd, mode = os.F_OK | os.X_OK, path = None)
حدود
في بناء الجملة أعلاه -
- تقوم هذه الطريقة بإرجاع المسار إلى تطبيق قابل للتنفيذ.
دعونا نفهم المثال التالي.
مثال -
# importing shutil module import shutil # search the file cmd = 'python' # Using shutil.which() method locating = shutil.which(cmd) # Print result print(locating)
انتاج:
C:Pythonpython.EXE
سيجد الملف المحدد في الكمبيوتر، إذا تم العثور على الملف فإنه يعيد مسار الملف وإلا فإنه يعيد لا شيء.