pathlib و os
pathlib & os
مفهوم
~18 دقيقة
pathlib و os — التعامل مع نظام الملفات
قبل Python 3.4، كان العمل مع الملفات والمجلدات يعني تعلّم دوال os.path والجمع بينها بطريقة مربكة:
# الأسلوب القديم — Old way (os.path)
import os
مسار = os.path.join(os.path.expanduser("~"), "documents", "report.txt")
if os.path.exists(مسار) and os.path.isfile(مسار):
with open(مسار, "r") as ف:
محتوى = ف.read()
Python 3.4 أضافت pathlib — وحدة تعامل مع المسارات كـ كائنات بدلاً من نصوص. النتيجة كود أوضح وأكثر أماناً:
# الأسلوب الحديث — Modern way (pathlib)
from pathlib import Path
مسار = Path.home() / "documents" / "report.txt"
if مسار.is_file():
محتوى = مسار.read_text()
الفرق؟ المسار أصبح كائناً ذكياً — يعرف ما هو، ويمكنه الإجابة على أسئلة عن نفسه.
إنشاء كائنات Path
main.go
Output:
فحص المسارات
main.go
Output:
القراءة والكتابة
pathlib تجعل قراءة الملفات وكتابتها بسيطة جداً للملفات النصية وغير النصية:
main.go
Output:
إنشاء المجلدات وfglob
main.go
Output:
os.environ — متغيرات البيئة
متغيرات البيئة (environment variables) هي طريقة آمنة لتمرير الإعدادات والأسرار للبرنامج بدلاً من كتابتها في الكود:
main.go
Output:
pathlib مقابل os.path — المقارنة
لماذا نفضّل pathlib في الكود الحديث؟
| المهمة | os.path (القديم) | pathlib (الحديث) |
|---|---|---|
| دمج مسارات | os.path.join(a, b, c) | Path(a) / b / c |
| اسم الملف | os.path.basename(p) | p.name |
| المجلد الأب | os.path.dirname(p) | p.parent |
| الامتداد | os.path.splitext(p)[1] | p.suffix |
| هل يوجد؟ | os.path.exists(p) | p.exists() |
| هل ملف؟ | os.path.isfile(p) | p.is_file() |
| قراءة ملف | open(p).read() | p.read_text() |
| كتابة ملف | open(p, "w").write(d) | p.write_text(d) |
pathlib لا تحلّ فقط مشكلة التركيب الطويل — بل تجعل المسار كائناً يعرف نفسه ويمكنك سؤاله مباشرة.
لا يزال os.path موجوداً وصحيحاً تماماً — ستجده في الكود القديم كثيراً. لكن للكود الجديد، pathlib هي الاختيار الأوضح.
تحدي — Challenge
استخدم Path('/tmp/projects/reports/report.txt') ثم .name للحصول على اسم الملف فقط