طريقة فعّالة لاستخراج أسماء الملفات في بايثون|os/pathlib

1. المقدمة

Python مرن للغاية فيما يتعلق بعمليات الملفات، ويمكنه أتمتة العديد من المهام باستخدام كود بسيط. في هذه المقالة، سنستعرض عدة طرق لاستخدام Python للحصول على أسماء الملفات. سوف نركز بشكل خاص على مكتبة Python القياسية، مثل وحدة os ووحدة pathlib. من خلال قراءة هذه المقالة، ستكتسب مهارة التعامل بكفاءة مع الملفات داخل الدليل وإنشاء سكريبتات للحصول على أسماء الملفات وتطبيق الفلاتر.

2. الأساسيات للحصول على اسم الملف في بايثون

أولاً، نبدأ بالطرق الأساسية للحصول على اسم الملف في بايثون. باستخدام الدالة os.path.basename() يمكنك استخراج اسم الملف من المسار المحدد.

2.1 طريقة استخدام os.path.basename()

os.path.basename() هي دالة تستخرج اسم الملف فقط من المسار الكامل. في المثال التالي، يتم استخراج اسم الملف من مسار الملف.
import os

file_path = "/user/home/document/file.txt"
file_name = os.path.basename(file_path)
print(file_name)  # النتيجة: "file.txt"

2.2 الحصول على اسم الدليل باستخدام os.path.dirname()

وبالمثل، باستخدام os.path.dirname() يمكنك الحصول على اسم الدليل من مسار الملف. هذا يتيح لك فصل اسم الملف عن اسم الدليل.
dir_name = os.path.dirname(file_path)
print(dir_name)  # النتيجة: "/user/home/document"

3. الحصول على جميع أسماء الملفات داخل الدليل

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

3.1 الحصول على أسماء الملفات باستخدام os.listdir()

os.listdir() باستخدامه، يمكنك الحصول على جميع الملفات والمجلدات داخل الدليل المحدد على شكل قائمة. وهو مثالي للعمليات البسيطة على الدليل.
import os

dir_path = "/user/home/document"
files = os.listdir(dir_path)
print(files)  # النتيجة: ["file1.txt", "file2.txt", "subfolder"]

3.2 الحصول على أسماء الملفات بشكل متكرر باستخدام os.walk()

إذا كنت ترغب في الحصول على الملفات بشكل متكرر بما في ذلك الدلائل الفرعية، فإن استخدام os.walk() هو الأكثر فعالية. يعرض الكود التالي جميع الملفات الموجودة في الدليل المحدد ودلائله الفرعية.
import os

dir_path = "/user/home/document"
for root, dirs, files in os.walk(dir_path):
    for file in files:
        print(os.path.join(root, file))

3.3 إضافة معالجة الأخطاء

قد يحدث خطأ إذا كان الدليل غير موجود أو إذا لم تكن لديك صلاحية الوصول. لذلك يُنصح بإضافة معالجة استثناءات باستخدام try-except.
dir_path = "/invalid/path"
try:
    files = os.listdir(dir_path)
    print(files)
except FileNotFoundError:
    print(f"{dir_path} غير موجود.")

4. الحصول على الامتداد وتغييره

عند الحصول على اسم الملف، قد تحتاج إلى التعامل مع الامتداد أيضًا. باستخدام os.path.splitext() يمكنك فصل الامتداد أو تغييره.

4.1 os.path.splitext() الحصول على الامتداد

os.path.splitext() هي دالة تُعيد اسم الملف والامتداد منفصلين.
import os

file_path = "/user/home/document/file.txt"
file_name, file_ext = os.path.splitext(file_path)
print(file_name)  # النتيجة: "/user/home/document/file"
print(file_ext)   # النتيجة: ".txt"

4.2 تغيير الامتداد

عند تغيير الامتداد، يتم إضافة الامتداد الجديد إلى اسم الملف الذي تم الحصول عليه باستخدام os.path.splitext().
new_file_path = file_name + ".jpg"
print(new_file_path)  # النتيجة: "/user/home/document/file.jpg"

5. تطبيق الحصول على أسماء الملفات باستخدام وحدة pathlib

منذ Python 3.4 وما بعده، وحدة pathlib مفيدة جدًا في التعامل مع مسارات الملفات. يمكن لـ pathlib التعامل مع مسارات الملفات بطريقة كائنية التوجه، مما يجعل استخدامها أكثر بديهية.

5.1 الحصول على أسماء الملفات باستخدام Path.iterdir()

باستخدام طريقة iterdir() في pathlib.Path()، يمكنك الحصول على أسماء الملفات ومجلدات داخل الدليل المحدد.
from pathlib import Path

dir_path = Path("/user/home/document")
for item in dir_path.iterdir():
    print(item.name)

5.2 الحصول على الملفات بشكل تكراري: rglob()

عند الحاجة إلى الحصول على أسماء الملفات بشكل تكراري بما في ذلك الأدلة الفرعية، يتم استخدام طريقة rglob(). يمكن أيضًا استخدامها كبديل لـ os.walk().
for file in dir_path.rglob("*"):
    print(file)

6. تصفية أسماء الملفات

إذا كنت ترغب في الحصول فقط على أسماء الملفات التي تتطابق مع شروط معينة، يمكنك استخدام وحدة glob أو طريقة glob() في pathlib لتطبيق التصفية.

6.1 تصفية حسب الامتداد

للحصول فقط على الملفات التي تحمل امتدادًا معينًا، استخدم حرف البدل *.
from pathlib import Path

dir_path = Path("/user/home/document")
for file in dir_path.glob("*.txt"):
    print(file)
هذا الكود يحصل فقط على ملفات .txt داخل الدليل المحدد.

7. ملخص

هناك طرق متعددة للحصول على أسماء الملفات باستخدام بايثون، ومن المهم اختيار الأسلوب المناسب وفقًا للاستخدام. إذا استخدمت العمليات الأساسية لوحدة os، وحتى الوظائف المتقدمة لـ pathlib، يمكنك معالجة الملفات داخل الدليل بكفاءة. في المرة القادمة، سنقدم معلومات حول تطبيقات عمليات الملفات مثل إعادة تسمية الملفات، نقلها، وحذفها.
年収訴求