أساسيات التعامل مع نظام الملفات في بايثون
يُعد التعامل مع نظام الملفات من أكثر المهام شيوعًا في تطوير بايثون. تشمل هذه العملية إنشاء الملفات وحذفها ونسخها ونقلها وإعادة تسميتها، بالإضافة إلى إنشاء المجلدات والتحقق من وجودها. تشكل عمليات الملفات الأساس لأتمتة المهام وتطوير الويب وتحليل البيانات وإدارة التهيئة ونشر التطبيقات.
توفر بايثون مجموعة واسعة من المكتبات المدمجة للتعامل بكفاءة مع نظام الملفات. الأدوات الرئيسية هي الوحدات os و shutil و pathlib. تغطي هذه المكتبات جميع السيناريوهات الممكنة تقريبًا - من العمليات الأساسية إلى المهام المتقدمة.
نقل الملفات في بايثون
استخدام الدالة shutil.move()
عند الحاجة إلى نقل ملف من مجلد إلى آخر، فإن الطريقة الأبسط والأكثر فعالية هي استخدام الدالة shutil.move(). تعمل هذه الدالة بشكل مشابه لأمر mv في أنظمة لينكس ويونكس.
import shutil
shutil.move('source/file.txt', 'destination/file.txt')
تتعامل الدالة shutil.move() تلقائيًا مع كل من الملفات الفردية والمجلدات بأكملها. أثناء النقل، يمكن إعادة تسمية الملف في نفس الوقت. من المهم ملاحظة أنه إذا كان هناك ملف بنفس الاسم موجودًا بالفعل في المجلد الهدف، فسيتم استبداله دون تحذير.
إنشاء المجلدات أثناء النقل
عند نقل الملفات، غالبًا ما تنشأ الحاجة إلى إنشاء مجلدات جديدة. الطريقة التالية تحل هذه المشكلة:
import os
import shutil
src = 'data/report.txt'
dst_dir = 'archive'
os.makedirs(dst_dir, exist_ok=True)
shutil.move(src, os.path.join(dst_dir, 'report.txt'))
الدالة os.makedirs() مع المعامل exist_ok=True تنشئ سلسلة من المجلدات إذا كانت غير موجودة ولا تتسبب في حدوث خطأ إذا كانت المجلدات موجودة بالفعل.
نقل المجلدات
تدعم الدالة shutil.move() أيضًا نقل المجلدات بأكملها:
shutil.move('old_folder', 'new_location/old_folder')
نسخ الملفات وإنشاء الروابط
النسخ الأساسي للملفات
لنسخ الملفات، توفر بايثون عدة دوال بوظائف مختلفة:
import shutil
# نسخ محتوى الملف
shutil.copy('file.txt', 'backup/file.txt')
الدالة copy() تنسخ محتوى الملف فقط، ولكنها لا تحتفظ بالبيانات الوصفية. للنسخ الكامل مع الاحتفاظ بجميع سمات الملف، يتم استخدام copy2():
shutil.copy2('file.txt', 'backup/file.txt')
نسخ المجلدات
لنسخ المجلدات بأكملها مع جميع محتوياتها، يتم استخدام الدالة copytree():
shutil.copytree('project', 'project_backup')
إنشاء الروابط الثابتة
الرابط الثابت هو اسم إضافي لملف موجود في نظام الملفات:
import os
os.link('file.txt', 'linked_file.txt')
الرابط الثابت يعني أن ملفًا فيزيائيًا واحدًا يمكن الوصول إليه من خلال مسارات متعددة مختلفة. تنعكس تغييرات محتوى الملف في جميع الروابط. يمكن التحقق من عدد الروابط الثابتة باستخدام os.stat().st_nlink.
إدارة المجلدات
إنشاء المجلدات
توفر بايثون دالتين رئيسيتين لإنشاء المجلدات:
import os
# إنشاء مجلد واحد
os.mkdir('new_folder')
# إنشاء هيكل مجلدات متداخلة
os.makedirs('parent/child/grandchild', exist_ok=True)
الدالة mkdir() تنشئ مجلدًا واحدًا فقط وتستدعي استثناء FileExistsError إذا كان المجلد موجودًا بالفعل.