प्रारंभिक कोड
import glob
import fnmatch
import pathlib
import os
pattern = '*.py'
path = '.'
समाधान 1 - "ग्लोब" का उपयोग करें
# lookup in current dir
glob.glob(pattern)
In [2]: glob.glob(pattern)
Out[2]: ['wsgi.py', 'manage.py', 'tasks.py']
समाधान २ - "os" + "fnmatch" का उपयोग करें
वेरिएंट 2.1 - वर्तमान डायर में लुकअप
# lookup in current dir
fnmatch.filter(os.listdir(path), pattern)
In [3]: fnmatch.filter(os.listdir(path), pattern)
Out[3]: ['wsgi.py', 'manage.py', 'tasks.py']
वेरिएंट 2.2 - लुकअप पुनरावर्ती
# lookup recursive
for dirpath, dirnames, filenames in os.walk(path):
if not filenames:
continue
pythonic_files = fnmatch.filter(filenames, pattern)
if pythonic_files:
for file in pythonic_files:
print('{}/{}'.format(dirpath, file))
परिणाम
./wsgi.py
./manage.py
./tasks.py
./temp/temp.py
./apps/diaries/urls.py
./apps/diaries/signals.py
./apps/diaries/actions.py
./apps/diaries/querysets.py
./apps/library/tests/test_forms.py
./apps/library/migrations/0001_initial.py
./apps/polls/views.py
./apps/polls/formsets.py
./apps/polls/reports.py
./apps/polls/admin.py
समाधान 3 - "पथलिब" का उपयोग करें
# lookup in current dir
path_ = pathlib.Path('.')
tuple(path_.glob(pattern))
# lookup recursive
tuple(path_.rglob(pattern))
टिप्पणियाँ:
- पायथन 3.4 पर परीक्षण किया गया
- मॉड्यूल "पैथलिब" केवल पायथन 3.4 में जोड़ा गया था
- Python 3.5 ने glob.glob https://docs.python.org/3.5/library/glob.html#glob.glob के साथ पुनरावर्ती देखने के लिए एक सुविधा जोड़ी
। चूंकि मेरी मशीन पायथन 3.4 के साथ स्थापित है, मैंने इसका परीक्षण नहीं किया है।