أساسيات بايثون 25: شرح مكتبة os في Python للتعامل مع الملفات والمجلدات للمبتدئين

أساسيات بايثون 25 شرح مكتبة os في Python للتعامل مع الملفات والمجلدات للمبتدئين

بعد أن تعلمت في الدروس السابقة من كورس أساسيات بايثون كيفية كتابة الكود، والتعامل مع المتغيرات، والشروط، والحلقات، والدوال، والقوائم، والملفات، والأخطاء، ثم فكرة 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، أو إنشاء مجلد داخل نفس مشروعك.

شرح معرفة مسار المجلد الحالي في Python باستخدام os.getcwd للمبتدئين

عرض الملفات والمجلدات باستخدام 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 للمبتدئين لأنه مهم جدًا لفهم أمثلة هذا الدرس.

مثال عرض الملفات والمجلدات في Python باستخدام os.listdir بطريقة مبسطة

الفرق بين الملف والمجلد في 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 والتعامل مع الأخطاء.

شرح إنشاء وحذف المجلدات في Python باستخدام os.mkdir و os.rmdir للمبتدئين

إنشاء مجلد جديد باستخدام 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}
شرح التعامل مع المسارات في Python باستخدام os.path.join و os.path.exists

تغيير اسم ملف أو مجلد باستخدام 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 في بايثون.

مشروع صغير: برنامج فحص مجلد وعرض تقرير عنه

الآن سنبني مشروعًا بسيطًا يناسب المبتدئين. البرنامج سيقوم بالآتي:

  1. يعرف المجلد الحالي.
  2. يعرض عدد الملفات.
  3. يعرض عدد المجلدات.
  4. يطبع أسماء الملفات والمجلدات.
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

حاول تطبيق التمرين التالي بنفسك:

  1. أنشئ ملفًا باسم folder_report.py.
  2. استدع مكتبة os.
  3. اطبع المجلد الحالي باستخدام os.getcwd().
  4. اعرض محتويات المجلد باستخدام os.listdir().
  5. اطبع فقط الملفات التي تنتهي بالامتداد .py.
  6. أنشئ مجلدًا باسم 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 موجود مسبقًا")

روابط داخلية مفيدة من بايثون العرب

لفهم هذا الدرس بشكل أفضل، أنصحك بمراجعة هذه الدروس والصفحات من موقع بايثون العرب:

مصادر خارجية رسمية للتوسع

إذا أردت قراءة التوثيق الرسمي بعد فهم الأساسيات، يمكنك الرجوع إلى هذه المصادر:

الخلاصة

مكتبة 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 أسهل.

```

إرسال تعليق

أحدث أقدم