Вы можете использовать функцию fnmatch.filter()
распознавать имена файлов, представляющие интерес:
import os, fnmatch
def get_all_files(path, pattern):
datafiles = []
for root,dirs,files in os.walk(path):
for file in fnmatch.filter(files, pattern):
pathname = os.path.join(root, file)
filesize = os.stat(pathname).st_size
datafiles.append([file, pathname, filesize])
return datafiles
print get_all_files('.', 'something.*') # all files named 'something'
Примечание, однако, можно было бы, с несколько более строк кода, также сделать что-то более общий который поддерживал все именованные аргументы os.walk()
«s:
import os, fnmatch
def glob_walk(top, pattern, **kwargs):
""" Wrapper for os.walk() that filters the files returned
with a pattern composed of Unix shell-style wildcards
as documented in the fnmatch module.
"""
for root, dirs, files in os.walk(top, **kwargs):
yield root, dirs, fnmatch.filter(files, pattern)
# sample usage
def get_all_files(path, pattern):
for root, dirs, files in glob_walk(path, pattern):
for file in files:
pathname = os.path.join(root, file)
filesize = os.stat(pathname).st_size
yield file, pathname, filesize
print list(get_all_files('.', 'something.*')) # all files named 'something'
Обратите внимание, что новая функция glob_walk()
(как WLL как get_all_files()
) в этой версии являются генераторами, как и os.walk()
.
'os.walk' не делает globbing – simonzack