Python File Handling

البحث الفعال عن الملفات حسب الامتداد في بايثون

Spread the love

يُعدّ البحث عن الملفات ذات الامتدادات المحددة مهمةً شائعةً عند العمل مع الملفات في بايثون. تستعرض هذه المقالة عدة طرق فعّالة ومتعددة الاستخدامات لإنجاز ذلك، لتناسب الاحتياجات المختلفة وأنماط البرمجة. سنغطي وحدات بايثون المختلفة والتقنيات، مما يسمح لك باختيار النهج الأمثل لحالتك الخاصة.

جدول المحتويات

  1. استخدام وحدة glob
  2. الاستفادة من وحدة os
  3. توظيف pathlib للبحث في مجلد واحد
  4. البحث المتكرر باستخدام os.walk
  5. البحث المتكرر باستخدام pathlib.rglob

1. استخدام وحدة glob

توفر وحدة glob طريقة موجزة للعثور على الملفات التي تتطابق مع نمط محدد داخل مجلد واحد. تقوم دالتها glob() بإرجاع قائمة بالمسارات التي تلبي النمط.


import glob

def find_files_with_extension_glob(directory, extension):
  """يعثر على الملفات ذات الامتداد المعطى باستخدام glob.glob()."""
  return glob.glob(f"{directory}/*{extension}")

# مثال:
files = find_files_with_extension_glob("./my_directory", ".txt")
print(files)

2. الاستفادة من وحدة os

توفر وحدة os تحكمًا أكثر دقة. تقوم os.listdir() بقائمة جميع الإدخالات في مجلد، مما يسمح بالتصفية المخصصة.


import os

def find_files_with_extension_os(directory, extension):
  """يعثر على الملفات ذات الامتداد المعطى باستخدام os.listdir()."""
  files = []
  for filename in os.listdir(directory):
    if filename.endswith(extension):
      files.append(os.path.join(directory, filename))
  return files

# مثال:
files = find_files_with_extension_os("./my_directory", ".txt")
print(files)

3. توظيف pathlib للبحث في مجلد واحد

توفر وحدة pathlib نهجًا موجهًا بالكائنات. توفر طريقتها glob() بناء جملة أنظف من glob.glob().


from pathlib import Path

def find_files_with_extension_pathlib(directory, extension):
  """يعثر على الملفات ذات الامتداد المعطى باستخدام pathlib.glob()."""
  return list(Path(directory).glob(f"*{extension}"))

# مثال:
files = find_files_with_extension_pathlib("./my_directory", ".txt")
print(files)

4. البحث المتكرر باستخدام os.walk

للبحث في المجلدات الفرعية، يتجول os.walk() عبر شجرة المجلدات، مما يسمح لك بالتحقق من كل ملف بحثًا عن الامتداد المطلوب.


import os

def find_files_recursive_os(directory, extension):
    """يعثر بشكل متكرر على الملفات ذات الامتداد المعطى باستخدام os.walk()."""
    files = []
    for root, _, filenames in os.walk(directory):
        for filename in filenames:
            if filename.endswith(extension):
                files.append(os.path.join(root, filename))
    return files

# مثال:
files = find_files_recursive_os("./my_directory", ".txt")
print(files)

5. البحث المتكرر باستخدام pathlib.rglob

توفر طريقة rglob() في pathlib الحل الأكثر أناقة للبحث المتكرر.


from pathlib import Path

def find_files_recursive_pathlib(directory, extension):
  """يعثر بشكل متكرر على الملفات ذات الامتداد المعطى باستخدام pathlib.rglob()."""
  return list(Path(directory).rglob(f"*{extension}"))

# مثال:
files = find_files_recursive_pathlib("./my_directory", ".txt")
print(files)

تذكر إنشاء مجلد “my_directory” مع بعض الملفات ذات الامتداد .txt لكي تعمل الأمثلة بشكل صحيح. اختر الطريقة التي تتوافق بشكل أفضل مع أسلوب البرمجة الخاص بك ومتطلبات المشروع. بالنسبة للعمليات البسيطة للبحث في مجلد واحد، فإن glob أو pathlib.glob() خيارات ممتازة. بالنسبة للبحث المتكرر، يوفر pathlib.rglob() الحل الأكثر إيجازًا وقابلية للقراءة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *