shutil لعمليات الملفات
انسخ الملفات وانقلها وأرشفها
shutil لعمليات الملفات درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
ما هي shutil؟
توفر وحدة shutil (أدوات shell) عمليات عالية المستوى على الملفات، مثل النسخ والنقل وحذف أشجار المجلدات وإنشاء الأرشيفات. وهي تعتمد على os لتنفيذ المهام اليومية.
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/a.txt', 'w') as f:
f.write('hello')
print('created a.txt')نسخ ملف
تنسخ shutil.copy(src, dst) محتوى الملف وبتات أذوناته إلى موقع جديد.
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/src.txt', 'w') as f:
f.write('data')
shutil.copy('/tmp/shutil_demo/src.txt', '/tmp/shutil_demo/copy.txt')
print(os.path.exists('/tmp/shutil_demo/copy.txt'))copy في مقابل copy2
تشبه shutil.copy2 الدالة copy، لكنها تحافظ أيضًا على البيانات الوصفية مثل الطوابع الزمنية. استخدمها عندما تكون أوقات التعديل مهمة.
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/m.txt', 'w') as f:
f.write('x')
shutil.copy2('/tmp/shutil_demo/m.txt', '/tmp/shutil_demo/m2.txt')
print('copied with metadata')نسخ شجرة كاملة
تنسخ shutil.copytree(src, dst) مجلدًا كاملًا بشكل تكراري. يجب ألا يكون المجلد الوجهة موجودًا مسبقًا، إلا إذا مررت dirs_exist_ok=True.
import shutil, os
os.makedirs('/tmp/tree_src/sub', exist_ok=True)
with open('/tmp/tree_src/sub/f.txt', 'w') as f:
f.write('hi')
shutil.rmtree('/tmp/tree_dst', ignore_errors=True)
shutil.copytree('/tmp/tree_src', '/tmp/tree_dst')
print(os.path.exists('/tmp/tree_dst/sub/f.txt'))نقل الملفات والمجلدات
تنقل shutil.move(src, dst) ملفًا أو مجلدًا أو تعيد تسميته. وهي تعمل عبر أنظمة الملفات، حيث قد تفشل os.rename.
import shutil, os
os.makedirs('/tmp/move_demo', exist_ok=True)
with open('/tmp/move_demo/old.txt', 'w') as f:
f.write('move me')
shutil.move('/tmp/move_demo/old.txt', '/tmp/move_demo/new.txt')
print(os.path.exists('/tmp/move_demo/new.txt'))حذف شجرة مجلدات
تزيل shutil.rmtree(path) مجلدًا وكل ما بداخله. استخدمها بحذر، إذ لا يمكن التراجع عن العملية.
import shutil, os
os.makedirs('/tmp/to_delete/inner', exist_ok=True)
shutil.rmtree('/tmp/to_delete')
print('exists after rmtree:', os.path.exists('/tmp/to_delete'))ignore_errors والأمان
يؤدي تمرير ignore_errors=True إلى rmtree إلى تجنب حدوث خطأ إذا كان المسار مفقودًا، وهذا مفيد عند تنظيف الملفات قبل تشغيل جديد.
import shutil
shutil.rmtree('/tmp/never_existed', ignore_errors=True)
print('no error even though path was absent')إنشاء أرشيف
تجمع shutil.make_archive(base_name, format, root_dir) مجلدًا في ملف zip أو tar باستدعاء واحد.
import shutil, os
os.makedirs('/tmp/arch_src', exist_ok=True)
with open('/tmp/arch_src/data.txt', 'w') as f:
f.write('archive me')
path = shutil.make_archive('/tmp/my_archive', 'zip', '/tmp/arch_src')
print('created', os.path.basename(path))استخراج أرشيف
تعكس shutil.unpack_archive(filename, extract_dir) العملية، إذ تفك ملف zip أو tar إلى مجلد.
import shutil, os
shutil.make_archive('/tmp/box', 'zip', '/tmp/arch_src')
shutil.unpack_archive('/tmp/box.zip', '/tmp/unpacked')
print(os.listdir('/tmp/unpacked'))العثور على الملفات التنفيذية
تحدد shutil.which(name) موقع برنامج في مسار PATH الخاص بالنظام، مثل الأمر which في shell. وتعيد المسار الكامل أو None.
import shutil
print(shutil.which('python3'))
print(shutil.which('definitely_not_a_real_program'))استخدام القرص
تعرض shutil.disk_usage(path) عدد البايتات الإجمالي والمستخدم والمتاح في نظام الملفات الذي يحتوي على المسار.
import shutil
usage = shutil.disk_usage('/')
print('total GB:', round(usage.total / 1e9, 1))
print('free GB:', round(usage.free / 1e9, 1))اختبار سريع
اختبر مدى فهمك لـ shutil.
مراجعة
لقد تعلمت استخدام shutil في عمليات الملفات:
- تنسخ
copy/copy2الملفات، بينما تنسخcopytreeأشجار المجلدات كاملة. - تعيد
moveالتسمية أو تنقل العناصر، بينما تحذفrmtreeأشجار المجلدات. - تتعامل
make_archive/unpack_archiveمع ملفات zip وtar. - تستعلم
whichوdisk_usageعن النظام.
المقرر التالي: إنشاء أدوات سطر الأوامر باستخدام argparse.
الأسئلة الشائعة
هل درس «shutil لعمليات الملفات» مجاني؟
نعم — نص درس «shutil لعمليات الملفات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «shutil لعمليات الملفات»؟
انسخ الملفات وانقلها وأرشفها تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «shutil لعمليات الملفات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تشغيل الأوامر باستخدام subprocess
- التقاط المخرجات
- البيئة والوحدة os
- shutil لعمليات الملفات