不论文件扩展名如何,均使用相同名称获取文件
问题内容:
我想列出所有具有相同名称的文件,而不管其扩展名如何。
os.walk
当我尝试搜索不带扩展名的文件名时出现空列表,但是当我提到带扩展名的文件名时。它列出了任何目录中具有相同名称和扩展名的所有文件。
def get_all_files(path):
Datafiles=[]
for root,dirs,files in os.walk(path):
for file in files:
pathname=os.path.join(root,file)
Datafiles.append([file,pathname])
return Datafiles
问题答案:
您可以使用该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()
的关键字参数:
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()
。