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

Python中如何保留指定结尾数字的文件并删除其余文件?

解决方案

问题背景

我有一批按以下格式生成的文件:

body00123.txt
body00124.txt
body00125.txt

body-1-2126.txt
body-1-2127.txt
body-1-2128.txt

body-3-3129.txt
body-3-3130.txt
body-3-3131.txt

文件名规则:前两组数字可为负数,但最后三位数字非负。

现在需要保留文件名结尾三位数字在以下列表中的文件,删除其余所有.txt文件:

123
127
129

期望保留的文件示例:

body00123.txt

body-1-2127.txt

body-3-3129.txt

之前尝试了这段Python代码,但结果是所有文件都被删除了:

if i not in myList:
     os.system('rm body*' + str(i) + '.txt')

问题原因

你之前的逻辑存在两个核心问题:

  1. 逻辑反转:错误地尝试删除"不在保留列表里的数字对应的文件",但通配符body*会模糊匹配所有以body开头的文件,导致误删;
  2. 匹配精度不足:没有精准定位到文件名的最后三位数字,容易出现误匹配。

正确实现方法

推荐用Python原生的glob和os模块精准处理,避免shell通配符的风险:

import os
import glob

# 要保留的结尾数字(转成字符串,方便直接匹配)
keep_endings = {'123', '127', '129'}

# 遍历所有body开头的txt文件
for file_path in glob.glob('body*.txt'):
    # 提取纯文件名(去掉路径)
    filename = os.path.basename(file_path)
    # 截取文件名中除.txt后缀外的部分
    name_core = filename[:-4]
    # 提取最后三位数字
    end_num = name_core[-3:]
    # 判断是否需要删除
    if end_num not in keep_endings:
        os.remove(file_path)
        # 可选:打印删除日志
        # print(f"已删除 {file_path}")

方案优势

  1. 精准匹配:不管文件名前缀格式如何,只取最后三位数字判断,完全符合需求;
  2. 安全可控:不用调用shell命令,避免通配符模糊匹配导致的误删;
  3. 逻辑清晰:逐个遍历文件,明确判断保留/删除规则,不易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:45:37