设计一个函数,列出目录及子目录下所有文件,可以过滤满足特定要求的文件,也可以只展示特定要求的文件。
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', ]))