设计一个函数,列出目录及子目录下所有文件,可以过滤满足特定要求的文件,也可以只展示特定要求的文件。
def list_files(path, include=[], exclude=[]):pass
类似于unittest里面的查找case操作
import os
def get_files(path, include=[], exclude=[]):
"""
os.listdir():只列出当前文件夹下的文件
os.walk():递归列出当前文件夹下的所有文件夹下的文件
path是要列出文件的路径。
include:白名单规则
exclude:黑名单规则
根据代码规则,黑名单机制优先于白名单机制执行。
"""
files = []
# 如果路径不存在,则直接返回空列表。
if not os.path.exists(path):
return files
# 如果路径是文件,则直接返回文件。
if os.path.isfile(path):
# 这里处理exclude规则--黑名单机制。不为空则遍历每一个规则去匹配
if exclude:
for rule in exclude:
if path.find(rule) != -1:
return files
# 这里处理include规则--白名单机制。
if include:
for rule in include:
if path.find(rule) != -1:
files.append(path)
# 既不在白名单也不再黑名单里面
else:
files.append(path)
return files
# 如果路径是目录,则列出目录内容,递归处理。
if os.path.isdir(path):
results = os.listdir(path)
for result in results:
# 将原路径与路径下文件名拼接成新路径。
new_path = "/".join([path, result])
files.extend(get_files(new_path, include, exclude))
return files
if __name__ == '__main__':
path = 'D:/PycharmProjects/test/1'
print(get_files(path, exclude=['__init__.py', ]))