You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:09:21