بعد أن تعلمت في الدروس السابقة من كورس أساسيات بايثون كيفية كتابة الكود، والتعامل مع المتغيرات، والشروط، والحلقات، والدوال، والقوائم، والملفات، والأخطاء، ثم فكرة Modules و import، حان الوقت لتتعلم مكتبة مهمة جدًا في بايثون اسمها os.
مكتبة os في Python تساعدك على التعامل مع نظام التشغيل من داخل الكود. بمعنى أبسط: تستطيع من خلالها معرفة المجلد الحالي، عرض الملفات داخل مجلد، إنشاء مجلدات، حذف مجلدات فارغة، فحص وجود ملف، بناء مسارات صحيحة، وقراءة بعض المعلومات من النظام.
{getToc} $title={محتوى المقال}
الفكرة المختصرة: مكتبة os تجعل برنامج Python قادرًا على التعامل مع الملفات والمجلدات والمسارات بطريقة عملية بدل الاعتماد على التعديل اليدوي خارج الكود. {alertInfo}
هذا الدرس مهم جدًا للمبتدئين؛ لأنك ستحتاج مكتبة os عندما تبدأ في بناء مشاريع حقيقية مثل: تنظيم الملفات، قراءة ملفات من مجلد معين، إنشاء مجلد لحفظ النتائج، بناء أدوات بسيطة، أو تجهيز مشاريع بايثون قابلة للنقل بين الأجهزة.
ما هي مكتبة os في Python؟
مكتبة os هي مكتبة قياسية مرفقة مع Python، أي أنك لا تحتاج إلى تثبيتها باستخدام pip. كل ما تحتاجه هو استدعاؤها داخل ملف Python باستخدام أمر import.
import os
بعد كتابة هذا السطر، تستطيع استخدام الأدوات الموجودة داخل مكتبة os مثل:
os.getcwd()لمعرفة المجلد الحالي.os.listdir()لعرض الملفات والمجلدات.os.mkdir()لإنشاء مجلد جديد.os.rmdir()لحذف مجلد فارغ.os.path.exists()لفحص هل الملف أو المجلد موجود.os.path.join()لبناء مسارات صحيحة.
إذا لم تكن تعرف معنى import جيدًا، أنصحك بمراجعة درس شرح Modules و import في Python للمبتدئين قبل التوسع في هذا الدرس.
لماذا نحتاج مكتبة os؟
عندما تكتب برامج بسيطة جدًا، قد لا تحتاج إلى التعامل مع ملفات ومجلدات كثيرة. لكن مع الوقت، ستجد نفسك تريد تنفيذ أمور مثل:
- معرفة مكان تشغيل البرنامج.
- قراءة جميع الملفات داخل مجلد معين.
- إنشاء مجلد لحفظ النتائج.
- التأكد من وجود ملف قبل فتحه.
- بناء مسار ملف بطريقة تعمل على Windows و Linux و macOS.
- تنظيم ملفات كثيرة حسب الامتداد أو الاسم.
بدون مكتبة مثل os ستضطر إلى كتابة المسارات يدويًا، وقد تظهر لك مشاكل كثيرة، خصوصًا عندما ينتقل المشروع من جهاز إلى جهاز آخر.
مهم للمبتدئين: لا تحفظ مسارات الملفات بطريقة عشوائية داخل الكود، لأن شكل المسار قد يختلف بين Windows و Linux و macOS. استخدم أدوات مثل os.path.join() لبناء المسار بطريقة أفضل. {alertWarning}
استدعاء مكتبة os
مثل أي مكتبة قياسية في Python، نبدأ باستدعاء os في أعلى الملف:
import os
print("تم استدعاء مكتبة os بنجاح")
الناتج المتوقع:
تم استدعاء مكتبة os بنجاح
لاحظ أنك لا تكتب pip install os؛ لأن os ليست مكتبة خارجية. هي موجودة ضمن مكتبات Python القياسية.
معرفة المجلد الحالي باستخدام os.getcwd
من أكثر الأوامر استخدامًا في مكتبة os هو الأمر os.getcwd(). كلمة getcwd اختصار لعبارة get current working directory، أي: احصل على مجلد العمل الحالي.
import os
current_folder = os.getcwd()
print(current_folder)
قد يظهر لك ناتج شبيه بهذا في Windows:
C:\Users\Admin\Desktop\python_project
وقد يظهر بهذا الشكل في Linux أو macOS:
/home/user/Desktop/python_project
المهم هنا أن os.getcwd() يخبرك من أين يعمل البرنامج حاليًا، وهذا مفيد عندما تريد قراءة ملف موجود بجانب ملف Python، أو إنشاء مجلد داخل نفس مشروعك.
عرض الملفات والمجلدات باستخدام os.listdir
إذا أردت معرفة الملفات والمجلدات الموجودة داخل مجلد معين، يمكنك استخدام os.listdir().
import os
items = os.listdir()
print(items)
إذا كان المجلد يحتوي على ملفات مثل main.py و notes.txt ومجلد باسم images، فقد يظهر الناتج مثل:
['main.py', 'notes.txt', 'images']
يمكنك أيضًا تحديد مجلد معين:
import os
items = os.listdir("data")
print(items)
هذا الكود يعرض محتويات مجلد اسمه data، بشرط أن يكون موجودًا داخل مجلد المشروع الحالي.
تنبيه: إذا طلبت من Python عرض محتويات مجلد غير موجود، سيظهر خطأ. لذلك من الأفضل أحيانًا فحص وجود المجلد أولًا باستخدام os.path.exists(). {alertWarning}
طباعة كل ملف في سطر مستقل
بدل طباعة القائمة كاملة دفعة واحدة، يمكنك استخدام حلقة for لطباعة كل عنصر في سطر منفصل:
import os
items = os.listdir()
for item in items:
print(item)
الناتج قد يكون مثل:
main.py
notes.txt
images
هذا الأسلوب مفيد عندما تريد لاحقًا فحص كل ملف، معرفة امتداده، أو تنفيذ عملية عليه.
إذا لم تكن مرتاحًا مع الحلقات، راجع درس شرح Loops في Python للمبتدئين لأنه مهم جدًا لفهم أمثلة هذا الدرس.
الفرق بين الملف والمجلد في os
عند استخدام os.listdir()، قد تحصل على أسماء ملفات ومجلدات معًا. لكن كيف تعرف هل العنصر ملف أم مجلد؟
هنا نستخدم:
os.path.isfile()لفحص هل المسار ملف.os.path.isdir()لفحص هل المسار مجلد.
import os
items = os.listdir()
for item in items:
if os.path.isfile(item):
print(item, "ملف")
elif os.path.isdir(item):
print(item, "مجلد")
هذا الكود يمر على جميع العناصر في المجلد الحالي، ثم يطبع هل كل عنصر ملف أم مجلد.
بناء المسارات بطريقة صحيحة باستخدام os.path.join
واحدة من أهم النقاط في التعامل مع الملفات هي بناء المسارات. قد يكتب المبتدئ مسارًا بهذا الشكل:
file_path = "data/info.txt"
قد يعمل هذا المسار في بعض الحالات، لكنه ليس دائمًا أفضل حل، لأن طريقة كتابة المسارات تختلف بين أنظمة التشغيل. لذلك الأفضل استخدام os.path.join().
import os
file_path = os.path.join("data", "info.txt")
print(file_path)
الفائدة هنا أن Python سيبني المسار بالشكل المناسب للنظام الذي تعمل عليه.
قاعدة ذهبية: عند بناء مسار ملف أو مجلد داخل Python، استخدم os.path.join() بدل لصق النصوص يدويًا. {alertSuccess}
فحص وجود ملف أو مجلد باستخدام os.path.exists
قبل أن تفتح ملفًا أو تدخل إلى مجلد، من الأفضل أن تتأكد أنه موجود. هذا يمنع كثيرًا من الأخطاء.
import os
file_path = os.path.join("data", "info.txt")
if os.path.exists(file_path):
print("الملف موجود")
else:
print("الملف غير موجود")
هذا المثال مهم جدًا خصوصًا عند التعامل مع الملفات. بدل أن تحاول فتح ملف غير موجود ويظهر خطأ، يمكنك فحص وجوده أولًا.
ولفهم التعامل مع الأخطاء بشكل أعمق، راجع درس شرح try و except في Python والتعامل مع الأخطاء.
إنشاء مجلد جديد باستخدام os.mkdir
لإنشاء مجلد جديد من داخل Python، نستخدم os.mkdir().
import os
os.mkdir("results")
print("تم إنشاء المجلد بنجاح")
هذا الكود ينشئ مجلدًا باسم results داخل المجلد الحالي.
لكن انتبه: إذا كان المجلد موجودًا مسبقًا، سيظهر خطأ. لذلك الأفضل أن نفحص أولًا:
import os
folder_name = "results"
if not os.path.exists(folder_name):
os.mkdir(folder_name)
print("تم إنشاء المجلد")
else:
print("المجلد موجود مسبقًا")
هذا الكود أفضل للمبتدئين لأنه يمنع ظهور خطأ عند تكرار تشغيل البرنامج.
إنشاء أكثر من مجلد باستخدام os.makedirs
إذا أردت إنشاء مسار يحتوي على أكثر من مجلد، مثل reports/2026/june، استخدم os.makedirs() بدل os.mkdir().
import os
os.makedirs("reports/2026/june", exist_ok=True)
print("تم إنشاء المسار بنجاح")
استخدمنا هنا exist_ok=True حتى لا يظهر خطأ إذا كان المجلد موجودًا مسبقًا.
متى أستخدم mkdir ومتى أستخدم makedirs؟ استخدمmkdirلإنشاء مجلد واحد، واستخدمmakedirsعندما تريد إنشاء مسار يحتوي على أكثر من مستوى. {alertInfo}
حذف مجلد فارغ باستخدام os.rmdir
يمكنك حذف مجلد فارغ باستخدام os.rmdir().
import os
folder_name = "old_folder"
if os.path.exists(folder_name):
os.rmdir(folder_name)
print("تم حذف المجلد")
else:
print("المجلد غير موجود")
لكن يجب الانتباه إلى نقطة مهمة: os.rmdir() يحذف المجلد فقط إذا كان فارغًا. إذا كان داخله ملفات أو مجلدات أخرى، سيظهر خطأ.
تحذير مهم: لا تجرب أوامر الحذف على مجلدات مهمة. أنشئ مجلدًا تجريبيًا أولًا حتى تفهم السلوك قبل تطبيقه على ملفاتك الحقيقية. {alertWarning}
تغيير اسم ملف أو مجلد باستخدام os.rename
يمكنك استخدام os.rename() لتغيير اسم ملف أو مجلد.
import os
old_name = "old.txt"
new_name = "new.txt"
if os.path.exists(old_name):
os.rename(old_name, new_name)
print("تم تغيير اسم الملف")
else:
print("الملف القديم غير موجود")
هذا المثال يبحث عن ملف باسم old.txt، فإذا كان موجودًا يغير اسمه إلى new.txt.
حذف ملف باستخدام os.remove
لحذف ملف، نستخدم os.remove(). لاحظ أن هذا الأمر مخصص للملفات، وليس للمجلدات.
import os
file_name = "temp.txt"
if os.path.exists(file_name):
os.remove(file_name)
print("تم حذف الملف")
else:
print("الملف غير موجود")
مرة أخرى: تعامل مع أوامر الحذف بحذر، خصوصًا إذا كنت تستخدم مسارات حقيقية.
مثال عملي: إنشاء مجلد results وحفظ ملف داخله
الآن سنجمع أكثر من فكرة معًا في مثال عملي بسيط. نريد إنشاء مجلد باسم results، ثم حفظ ملف نصي داخله.
import os
folder_name = "results"
if not os.path.exists(folder_name):
os.mkdir(folder_name)
file_path = os.path.join(folder_name, "report.txt")
with open(file_path, "w", encoding="utf-8") as file:
file.write("هذا تقرير تجريبي تم إنشاؤه باستخدام Python.")
print("تم إنشاء الملف داخل مجلد results")
في هذا المثال استخدمنا:
os.path.exists()لفحص وجود المجلد.os.mkdir()لإنشاء المجلد إذا لم يكن موجودًا.os.path.join()لبناء مسار الملف.open()لإنشاء وكتابة ملف نصي.
إذا كنت تريد مراجعة التعامل مع الملفات، اقرأ درس شرح التعامل مع الملفات في Python للمبتدئين.
مثال عملي: عرض ملفات txt فقط داخل مجلد
لنفترض أن لديك مجلدًا يحتوي على ملفات كثيرة، وتريد عرض الملفات التي تنتهي بالامتداد .txt فقط.
import os
items = os.listdir()
for item in items:
if os.path.isfile(item) and item.endswith(".txt"):
print(item)
هذا المثال مفيد جدًا عندما تريد التعامل مع نوع محدد من الملفات فقط، مثل ملفات النصوص أو الصور أو ملفات CSV.
مثال عملي: عدّ عدد الملفات داخل مجلد
هذا مثال بسيط ومفيد: نريد حساب عدد الملفات فقط داخل المجلد الحالي، بدون احتساب المجلدات.
import os
count = 0
for item in os.listdir():
if os.path.isfile(item):
count += 1
print("عدد الملفات:", count)
هنا استخدمنا متغيرًا باسم count، وبدأناه من صفر، ثم زدناه بمقدار واحد كلما وجدنا ملفًا.
مثال عملي: تنظيم الملفات حسب الامتداد
هذا مثال أطول قليلًا، لكنه ممتاز لفهم الفائدة الحقيقية من مكتبة os. سنكتب برنامجًا يقرأ الملفات في المجلد الحالي، ثم يطبع نوع كل ملف حسب امتداده.
import os
for item in os.listdir():
if os.path.isfile(item):
name, extension = os.path.splitext(item)
if extension == ".txt":
print(item, "ملف نصي")
elif extension == ".py":
print(item, "ملف Python")
elif extension == ".jpg" or extension == ".png":
print(item, "صورة")
else:
print(item, "نوع آخر")
في هذا المثال استخدمنا os.path.splitext() لتقسيم اسم الملف إلى اسم الملف بدون الامتداد وامتداد الملف مثل .txt أو .py.
أهم دوال os للمبتدئين
| الدالة | وظيفتها | مثال سريع |
|---|---|---|
os.getcwd() |
معرفة المجلد الحالي الذي يعمل منه البرنامج | os.getcwd() |
os.listdir() |
عرض محتويات مجلد | os.listdir() |
os.mkdir() |
إنشاء مجلد واحد | os.mkdir("data") |
os.makedirs() |
إنشاء مسار يحتوي على عدة مجلدات | os.makedirs("a/b/c") |
os.rmdir() |
حذف مجلد فارغ | os.rmdir("old") |
os.remove() |
حذف ملف | os.remove("temp.txt") |
os.rename() |
تغيير اسم ملف أو مجلد | os.rename("old.txt", "new.txt") |
os.path.exists() |
فحص وجود ملف أو مجلد | os.path.exists("data") |
os.path.join() |
بناء مسار صحيح | os.path.join("data", "file.txt") |
os.path.isfile() |
فحص هل المسار ملف | os.path.isfile("main.py") |
os.path.isdir() |
فحص هل المسار مجلد | os.path.isdir("images") |
الفرق بين os و pathlib
قد تجد في بعض الشروحات مكتبة أخرى اسمها pathlib. هذه المكتبة أيضًا تُستخدم للتعامل مع المسارات والملفات، وهي حديثة ومريحة في كثير من الحالات.
لكن للمبتدئ، تعلم os مهم جدًا لأنك ستجده في كثير من الشروحات والأكواد القديمة والجديدة. وبعد أن تفهم os.path جيدًا، سيكون الانتقال إلى pathlib أسهل.
| المقارنة | os | pathlib |
|---|---|---|
| الفكرة | دوال للتعامل مع النظام والمسارات | كائنات تمثل المسارات بطريقة منظمة |
| مناسب للمبتدئ؟ | نعم، خاصة لفهم الأكواد المنتشرة | نعم، لكنه يحتاج فهم فكرة الكائنات لاحقًا |
| الاستخدام الشائع | مشاريع كثيرة وشروحات قديمة وحديثة | أسلوب حديث ونظيف للتعامل مع المسارات |
أخطاء شائعة عند استخدام مكتبة os
1. كتابة المسار يدويًا بطريقة غير مناسبة
من الأخطاء الشائعة أن تكتب المسار بهذه الطريقة:
file_path = "data\info.txt"
قد يسبب هذا مشاكل بسبب الشرطة المائلة \ في النصوص. الأفضل:
import os
file_path = os.path.join("data", "info.txt")
2. حذف ملف أو مجلد بدون فحص
لا تستخدم أوامر الحذف مباشرة قبل التأكد من المسار:
# لا تفعل هذا بدون فهم المسار جيدًا
os.remove(file_path)
الأفضل:
if os.path.exists(file_path) and os.path.isfile(file_path):
os.remove(file_path)
3. استخدام os.rmdir لحذف مجلد غير فارغ
os.rmdir() يحذف المجلد الفارغ فقط. إذا كان المجلد يحتوي على ملفات، سيظهر خطأ. لا تستخدم أوامر حذف متقدمة قبل فهمها جيدًا.
4. نسيان import os
إذا استخدمت os.getcwd() بدون استدعاء المكتبة، سيظهر خطأ مثل:
NameError: name 'os' is not defined
الحل:
import os
وإذا أردت فهم هذا الخطأ، راجع درس حل خطأ NameError name is not defined في بايثون.
مشروع صغير: برنامج فحص مجلد وعرض تقرير عنه
الآن سنبني مشروعًا بسيطًا يناسب المبتدئين. البرنامج سيقوم بالآتي:
- يعرف المجلد الحالي.
- يعرض عدد الملفات.
- يعرض عدد المجلدات.
- يطبع أسماء الملفات والمجلدات.
import os
current_folder = os.getcwd()
items = os.listdir()
files_count = 0
folders_count = 0
print("المجلد الحالي:", current_folder)
print("-" * 40)
for item in items:
if os.path.isfile(item):
files_count += 1
print("ملف:", item)
elif os.path.isdir(item):
folders_count += 1
print("مجلد:", item)
print("-" * 40)
print("عدد الملفات:", files_count)
print("عدد المجلدات:", folders_count)
هذا المشروع صغير، لكنه يجمع أهم الأفكار التي تعلمناها في الدرس. ويمكنك تطويره لاحقًا ليحفظ التقرير في ملف نصي، أو يعرض فقط ملفات امتداد معين، أو ينظم الملفات داخل مجلدات.
تمرين بسيط على مكتبة os
حاول تطبيق التمرين التالي بنفسك:
- أنشئ ملفًا باسم
folder_report.py. - استدع مكتبة
os. - اطبع المجلد الحالي باستخدام
os.getcwd(). - اعرض محتويات المجلد باستخدام
os.listdir(). - اطبع فقط الملفات التي تنتهي بالامتداد
.py. - أنشئ مجلدًا باسم
reportsإذا لم يكن موجودًا.
الحل المقترح:
import os
print("المجلد الحالي:", os.getcwd())
for item in os.listdir():
if os.path.isfile(item) and item.endswith(".py"):
print("ملف Python:", item)
if not os.path.exists("reports"):
os.mkdir("reports")
print("تم إنشاء مجلد reports")
else:
print("مجلد reports موجود مسبقًا")
روابط داخلية مفيدة من بايثون العرب
لفهم هذا الدرس بشكل أفضل، أنصحك بمراجعة هذه الدروس والصفحات من موقع بايثون العرب:
- كورس أساسيات بايثون للمبتدئين
- شرح Modules و import في Python للمبتدئين
- شرح التعامل مع الملفات في Python للمبتدئين
- شرح try و except في Python والتعامل مع الأخطاء
- شرح pip في Python وتثبيت مكتبات بايثون
مصادر خارجية رسمية للتوسع
إذا أردت قراءة التوثيق الرسمي بعد فهم الأساسيات، يمكنك الرجوع إلى هذه المصادر:
الخلاصة
مكتبة os من أهم مكتبات Python القياسية التي يحتاجها أي مبتدئ عندما يبدأ في التعامل مع مشاريع حقيقية. فهي تساعدك على معرفة المجلد الحالي، عرض الملفات، إنشاء المجلدات، حذف الملفات، تغيير الأسماء، فحص وجود المسارات، وبناء مسارات صحيحة تعمل على أكثر من نظام تشغيل.
في البداية قد تبدو مكتبة os كثيرة التفاصيل، لكن لا تحتاج إلى حفظ كل شيء. ركز أولًا على الأوامر الأساسية: os.getcwd() و os.listdir() و os.path.exists() و os.path.join() و os.mkdir(). بعد ذلك ستفهم باقي الدوال بسهولة من خلال التطبيق العملي.
الخلاصة العملية: استخدمosعندما تريد أن يتعامل برنامجك مع الملفات والمجلدات والمسارات من داخل Python، واستخدمos.path.join()لبناء المسارات بطريقة آمنة ومنظمة. {alertSuccess}
أسئلة شائعة مع إجاباتها
هل أحتاج إلى تثبيت مكتبة os باستخدام pip؟
لا. مكتبة os من مكتبات Python القياسية، لذلك لا تحتاج إلى تثبيتها. فقط اكتب import os في أعلى ملف Python.
ما فائدة os.getcwd في Python؟
تستخدم os.getcwd() لمعرفة المجلد الحالي الذي يعمل منه البرنامج. هذا مفيد عند قراءة ملفات أو إنشاء ملفات داخل نفس مجلد المشروع.
ما الفرق بين os.listdir و os.getcwd؟
os.getcwd() تعرض مسار المجلد الحالي، أما os.listdir() فتعرض محتويات المجلد من ملفات ومجلدات.
كيف أفحص هل الملف موجود في Python؟
يمكنك استخدام os.path.exists() لفحص وجود ملف أو مجلد. وإذا أردت التأكد أنه ملف تحديدًا، استخدم os.path.isfile().
كيف أنشئ مجلدًا في Python؟
استخدم os.mkdir("folder_name") لإنشاء مجلد واحد. وإذا أردت إنشاء مسار يحتوي على عدة مجلدات، استخدم os.makedirs().
هل يمكن حذف الملفات باستخدام مكتبة os؟
نعم، يمكن حذف ملف باستخدام os.remove()، وحذف مجلد فارغ باستخدام os.rmdir(). لكن يجب استخدام أوامر الحذف بحذر شديد.
ما الأفضل: os أم pathlib؟
كلاهما مفيد. مكتبة os مهمة جدًا لأنها منتشرة في كثير من الأكواد والشروحات، أما pathlib فهي أسلوب حديث ومريح للتعامل مع المسارات. للمبتدئ، فهم os أولًا يجعل الانتقال إلى pathlib أسهل.




