في منشور سابق ، OS.walk في بايثون، لقد وصفت كيفية استخدام os.walk وعرضت بعض الأمثلة على كيفية استخدامه في البرامج النصية.
في هذه المقالة ، سأوضح كيفية استخدام وظيفة الوحدة النمطية os.walk () للمشي في شجرة دليل ، ووحدة fnmatch لمطابقة أسماء الملفات.
ما هو OS.walk؟يقوم بإنشاء أسماء الملفات في شجرة الدليل عن طريق السير في الشجرة إما من أعلى إلى أسفل أو من أسفل إلى أعلى.
لكل دليل في الشجرة متجذر في أعلى الدليل (بما في ذلك الجزء العلوي نفسه) ، فإنه ينتج 3-tuple (dirpath ، dirnames ، filenames).
dirpath # سلسلة ، المسار إلى الدليل.
dirnames # هي قائمة بأسماء الدلائل الفرعية في dirpath (باستثناء “.” و “..”).
filenames # هي قائمة بأسماء الملفات غير الدليل في dirpath.
لاحظ أن الأسماء الموجودة في القوائم لا تحتوي على مكونات مسار.
للحصول على مسار كامل (يبدأ بالأعلى) لملف أو دليل في dirpath ، قم بعمل os.path.join (dirpath ، name). لمزيد من المعلومات ، يرجى الاطلاع على مستندات Python.
ما هو فنماتشال fnmatch وحدة يقارن أسماء الملفات بأنماط على غرار الكرة الأرضية مثل المستخدمة بواسطة أصداف يونكس.
هذه ليست هي نفسها الأكثر تعقيدًا تعبير عادي قواعد. إنها مجرد عملية مطابقة سلسلة.
إذا وجدت أنه من الأنسب استخدام نمط نمط مختلف ، على سبيل المثال التعبيرات العادية ، فما عليك سوى استخدام عمليات regex لمطابقة أسماء الملفات الخاصة بك. http://www.doughellmann.com/PyMOTW/fnmatch/
ماذا تعمل، أو ماذا تفعل؟تُستخدم الوحدة النمطية fnmatch لمطابقة نمط البطاقة البرية.
مطابقة بسيطة
يقارن fnmatch () اسم ملف واحد مقابل نمط ويعيد قيمة منطقية تشير إلى ما إذا كانا متطابقين أم لا. تكون المقارنة حساسة لحالة الأحرف عندما يستخدم نظام التشغيل نظام ملفات حساسًا لحالة الأحرف.
الفلتره
لاختبار تسلسل أسماء الملفات ، يمكنك استخدام عامل التصفية (). تقوم بإرجاع قائمة بالأسماء التي تتطابق مع وسيطة النمط.
ابحث عن جميع ملفات mp3سيبحث هذا البرنامج النصي عن ملفات * .mp3 من مسار الجذر (“/”)
import fnmatch
import os
rootPath="https://www.pythonforbeginners.com/"
pattern = '*.mp3'
for root, dirs, files in os.walk(rootPath):
for filename in fnmatch.filter(files, pattern):
print( os.path.join(root, filename))
Code language: JavaScript (javascript)
ابحث في الكمبيوتر عن ملفات محددةيستخدم هذا البرنامج النصي ‘os.walk’ و ‘fnmatch’ مع عوامل تصفية للبحث في القرص الصلب عن جميع ملفات الصور
import fnmatch
import os
images = ['*.jpg', '*.jpeg', '*.png', '*.tif', '*.tiff']
matches = []
for root, dirnames, filenames in os.walk("C:"):
for extensions in images:
for filename in fnmatch.filter(filenames, extensions):
matches.append(os.path.join(root, filename))
Code language: JavaScript (javascript)
هناك العديد من الطرق الأخرى (والأسرع) للقيام بذلك ، لكنك الآن تفهم أساسيات ذلك.
المزيد من القراءة
http://rosettacode.org/wiki/Walk_a_directory/Recursively#Python