Python删除目录无用文件:保留指定文件及output_of_final前缀文件
问题描述
在指定目录执行Python脚本后会生成大量输出文件,仅需保留其中5-6个有用文件,其余文件要从目录中清理删除。
最初实现的清理逻辑是:将需要固定保留的文件存入列表,遍历目录时删除所有不在列表内的文件,原有实现代码如下:
list1=['prog_1.py', 'prog_2.py', 'prog_3.py'] #Extend import os dir = '/home/dev/codes' #Change accordingly for f in os.listdir(dir): if f not in list1: os.remove(os.path.join(dir, f))
现在需要新增一条保留规则:所有文件名以output_of_final开头的输出文件不得删除,咨询该需求的实现方式,以及是否需要使用正则完成。
解答
完全不需要使用regex正则,这种简单前缀匹配场景,直接调用Python字符串内置的startswith()方法即可实现,代码更简洁、运行效率也更高。
你只需要调整删除环节的判断条件:只有当文件既不在固定保留列表中,且文件名不以output_of_final开头时,才执行删除操作。
顺便修正原有代码的两个潜在问题,避免运行报错:
- 不要使用
dir作为变量名,它是Python的内置函数名,直接覆盖容易引发隐性bug os.listdir()会同时返回目录下的子文件夹,直接对文件夹调用os.remove()会抛出错误,删除前需要先判断当前遍历对象是否为普通文件
修改后的可直接运行代码如下:
import os # 固定保留的文件名列表,可按需扩展 keep_files = ['prog_1.py', 'prog_2.py', 'prog_3.py'] # 目标清理目录,可按需修改路径 target_dir = '/home/dev/codes' # 需要保留的文件名前缀 keep_prefix = 'output_of_final' for f in os.listdir(target_dir): file_path = os.path.join(target_dir, f) # 跳过子目录,仅处理普通文件 if not os.path.isfile(file_path): continue # 满足任意一个保留规则则跳过删除 if f in keep_files or f.startswith(keep_prefix): continue # 不符合保留规则的文件执行删除 os.remove(file_path)
只有当后续需要实现更复杂的文件名匹配规则时(比如匹配带特定数字后缀的文件、匹配文件名中间的固定字段等),再考虑引入正则即可,当前需求用原生字符串方法是最优解。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

