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

Python如何避免嵌套简化文件匹配删除场景的实现代码?

Python代码优化简化方案

优化核心方向

  • 移除无意义的嵌套缩进,用卫语句提前跳过不符合条件的文件,降低代码阅读成本
  • 补全缺失的依赖导入、异常处理逻辑,避免运行时报错
  • 修正路径硬编码问题,适配跨操作系统和子目录遍历场景
  • 拆分独立逻辑块,后续调整规则时修改成本更低

优化后完整代码

import os
import fnmatch

TARGET_FOLDER = "folder"
FILE_PATTERN = "pattern"

for root, _, files in os.walk(TARGET_FOLDER):
    for old_file in files:
        # 不匹配文件名规则直接跳过
        if not fnmatch.fnmatch(old_file, FILE_PATTERN):
            continue
        # 拆分文件名,不符合格式直接跳过
        try:
            spl = old_file.rsplit('_')
            seg6 = int(spl[6]) * 2
            seg7 = int(spl[7]) * 2
        except (IndexError, ValueError):
            continue
        # 拼接新文件路径判断是否存在
        new_file_path = os.path.join(TARGET_FOLDER, f"xxx_{seg6}_{seg7}_yyy.txt")
        if os.path.isfile(new_file_path):
            continue
        # 满足删除条件,执行删除
        old_file_path = os.path.join(root, old_file)
        os.remove(old_file_path)

可选简化场景

如果你不需要遍历子目录,只需要处理目标文件夹的一级文件,还可以进一步简化掉os.walk的嵌套:

import os
import fnmatch

TARGET_FOLDER = "folder"
FILE_PATTERN = "pattern"

for old_file in os.listdir(TARGET_FOLDER):
    old_file_path = os.path.join(TARGET_FOLDER, old_file)
    if not os.path.isfile(old_file_path) or not fnmatch.fnmatch(old_file, FILE_PATTERN):
        continue
    try:
        spl = old_file.rsplit('_')
        new_file_path = os.path.join(TARGET_FOLDER, f"xxx_{int(spl[6])*2}_{int(spl[7])*2}_yyy.txt")
    except (IndexError, ValueError):
        continue
    if not os.path.isfile(new_file_path):
        os.remove(old_file_path)

内容的提问来源于stack exchange,提问作者user1298426

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:39:00