import os
import fnmatch
"""根据指定文件名格式,筛选符合条件的文件,把文件的路径加上文件名一起返回"""
def is_file_match(filename, patterns):
"""
判断符合指定模式的文件名
:param filename: 文件名
:param patterns: 文件名模式的列表
:return: True False
"""
# print(patterns)
for pattern in patterns:
# 遍历指定文件模式
# print(pattern)
if fnmatch.fnmatch(filename, pattern):
# 利用fnmatch方法判断文件名是否符合指定模式
return True
return False
def find_specific_files(root, patterns=['*'], exclude_dirs=[]):
"""
# 查找符合指定文件模式的文件的函数
:param root: 需要查找文件的路径
:param patterns: 指定文件名模式列表
:param exclude_dirs: 不包含路径
:return:
"""
for root, list_dirnames, list_filenames in os.walk(root):
# os.walk方法返回三元组(指定路径名,目录列表,文件列表)
for filename in list_filenames:
# 遍历文件列表
if is_file_match(filename, patterns):
# 调用文件判断方法
yield os.path.join(root, filename)
for d in exclude_dirs:
if d in list_dirnames:
list_dirnames.remove(d)
if __name__ == '__main__':
patterns = ['*']
# print(is_file_match('a.txt', patterns))
ret = find_specific_files('.', patterns)
for i in ret:
print(i)
# print(i, '---------->', os.path.getsize(i))
# files = {name: os.path.getsize(name) for name in ret}
# result = sorted(files.items(), key=lambda d: d[1], reverse=True)
# print(result)
# for i, j in enumerate(result, 1):
# print(i,j[0],j[1])