يُعدّ البحث عن الملفات ذات الامتدادات المحددة مهمةً شائعةً عند العمل مع الملفات في بايثون. تستعرض هذه المقالة عدة طرق فعّالة ومتعددة الاستخدامات لإنجاز ذلك، لتناسب الاحتياجات المختلفة وأنماط البرمجة. سنغطي وحدات بايثون المختلفة والتقنيات، مما يسمح لك باختيار النهج الأمثل لحالتك الخاصة.
جدول المحتويات
- استخدام وحدة
glob
- الاستفادة من وحدة
os
- توظيف
pathlib
للبحث في مجلد واحد - البحث المتكرر باستخدام
os.walk
- البحث المتكرر باستخدام
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()
الحل الأكثر إيجازًا وقابلية للقراءة.