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])