تحقق مما إذا كان الملف موجودًا في بايثون: os، pathlib، glob

1. لماذا التحقق من وجود الملف في بايثون

المقدمة

التحقق من وجود الملف أمر أساسي لتحسين استقرار البرنامج. على سبيل المثال، عند قراءة أو كتابة البيانات، إذا كان الملف المستهدف غير موجود، يحدث خطأ ويتوقف تنفيذ البرنامج. في بايثون، هناك عدة طرق للتحقق من وجود الملف، ومن المهم اختيار الطريقة الأنسب للسيناريو المحدد.

تقدم هذه المقالة طرق فحص الملفات باستخدام وحدة os، وحدة pathlib، ووحدة glob، وتوضح مزايا كل نهج.

2. النهج الأساسي: وحدة os

كيفية استخدام os.path.exists()

os.path.exists() تُستخدم للتحقق مما إذا كان المسار المحدد موجودًا كملف أو دليل. تُعيد هذه الدالة True إذا كان موجودًا وFalse إذا لم يكن كذلك.

import os

if os.path.exists("example.txt"):
    print("The file exists")
else:
    print("The file does not exist")

يفحص هذا الكود ما إذا كان example.txt موجودًا ويعرض رسالة بناءً على النتيجة. os.path.exists() طريقة عامة يمكنها فحص كل من الملفات والأدلة.

الاختيار بين os.path.isfile() و os.path.isdir()

os.path.exists() لا تميز بين الملفات والأدلة، لكن استخدام os.path.isfile() أو os.path.isdir() يتيح لك تحديد ما إذا كان الهدف ملفًا أو دليلًا.

if os.path.isfile("example.txt"):
    print("This is a file")
elif os.path.isdir("example.txt"):
    print("This is a directory")
else:
    print("It does not exist")

بهذه الطريقة، بعد التأكد من وجود الهدف، يتيح لك تحديد ما إذا كان ملفًا أو دليلًا إجراء عمليات أكثر دقة.

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. المتقدم: وحدة pathlib

استخدام طريقة Path.exists()

باستخدام pathlib يمكنك استعمال طريقة Path.exists() للتحقق مما إذا كان ملف أو دليل موجودًا. مثل os.path.exists()، تُعيد True أو False، لكن الكود يصبح أكثر اختصارًا.

from pathlib import Path

file_path = Path("example.txt")

if file_path.exists():
    print("The file exists")
else:
    print("The file does not exist")

مع هذا النهج، يُعامل مسار الملف ككائن Path، لذا يُكتب الكود بطريقة كائنية التوجه ويكون أسهل في الصيانة.

Path.is_file() و Path.is_dir()

توفر pathlib أيضًا طريقتي is_file() و is_dir()، مما يتيح لك بسهولة التمييز بين ما إذا كان شيء ما ملفًا أو دليلًا.

if file_path.is_file():
    print("This is a file")
elif file_path.is_dir():
    print("This is a directory")

وبالتالي، باستخدام pathlib يمكنك ليس فقط التحقق من وجود الملف، بل أيضًا تحديد ما إذا كان الهدف ملفًا أو دليلًا بسهولة.

سيناريو واقعي

تكون pathlib مفيدة بشكل خاص في المشاريع التي تتعامل مع عدة أدلة وملفات. فهي تسمح لك بكتابة عمليات مسار معقدة ببساطة، وبما أن الكود نفسه يعمل عبر منصات مختلفة، فهو مثالي للتطوير متعدد المنصات.

4. التحقق من وجود الملف في بايثون: كيفية استخدام وحدة glob

المطابقة النمطية باستخدام glob

توفر وحدة glob إمكانية البحث عن الملفات بناءً على نمط اسم الملف أو المسار، مما يجعلها مفيدة عندما تريد فحص جميع الملفات التي تفي بمعايير معينة دفعة واحدة. تكون فعّالة خصوصًا في السيناريوهات التي تتضمن عددًا كبيرًا من الملفات.

import glob

files = glob.glob('*.txt')

if files:
    print("Text files found")
else:
    print("No text files found")

في هذا الكود، نسترجع جميع ملفات .txt الموجودة في الدليل الحالي كقائمة ونتحقق من وجودها. نظرًا لأنك تستطيع البحث عن الملفات بالجملة بناءً على أنواع أو أنماط ملفات محددة، فإنها مفيدة لإدارة ملفات النسخ الاحتياطي والمهام المشابهة.

سيناريو واقعي

glob مناسب عند العمل مع عدد كبير من الملفات أو المجلدات، أو عندما تحتاج إلى معالجة الملفات التي تطابق أسماء أو امتدادات محددة بكفاءة. على سبيل المثال، هو مثالي للمهام التي تتحقق بانتظام وتدير ملفات السجلات أو الملفات المؤقتة.

5. عمليات الملفات الآمنة باستخدام معالجة الاستثناءات

من المهم أيضًا استخدام معالجة الاستثناءات لمنع الأخطاء عندما لا يكون الملف موجودًا. باستخدام بنية try-except، يمكنك منع توقف البرنامج بسبب الأخطاء وعرض رسالة خطأ للمستخدم.

try:
    with open("example.txt") as f:
        print(f.read())
except FileNotFoundError:
    print("The file does not exist")

في هذا الكود، عندما لا يكون الملف موجودًا، يتم التقاط FileNotFoundError وعرض رسالة خطأ دون تعطل البرنامج. هذا يحسن تجربة المستخدم ويزيد من استقرار البرنامج.

6. الملخص

للتحقق من وجود الملف في بايثون، هناك عدة طرق مثل وحدة os، وحدة pathlib، ووحدة glob. كل طريقة لها مزاياها حسب السيناريو، ومن المهم اختيار الأنسب.

  • للتحقق البسيط من الوجود، os.path.exists() هو الأمثل.
  • عندما تكون هناك حاجة لتعامل مع مسارات معقدة أو دعم متعدد الأنظمة، فإن pathlib مفيد.
  • للبحث القائم على الأنماط، وحدة glob فعّالة.

من خلال فهم واستخدام هذه الطرق بشكل مناسب، يمكنك تنفيذ عمليات الملفات في بايثون بكفاءة وأمان. كخطوة تالية، نوصي بتعلم القراءة والكتابة والحذف ونسخ الملفات.

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール