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

如何批量移除文件名非数字字符,生成ID+map格式合规文件名?

解决批量提取文件名数字ID并重命名的问题

嗨,我来帮你搞定这个批量重命名的需求!首先先给你指出原来代码里的一个小语法错误——os.path.join(dir, % title + ext)这里的%是多余的,而且字符串拼接方式不太规范,咱们先修正这个,再重点解决高效移除非数字字符提取ID的问题。

核心需求:提取纯数字ID

要从类似035 - Springfield, MA的文件名里提取出纯数字035,有两种高效的方法:

方法1:字符串过滤(简单直接)

利用字符串的isdigit()方法过滤出所有数字字符,再拼接成完整ID:

id_part = ''.join(char for char in title if char.isdigit())

这个方法代码简洁,完全适配你的场景(数字是文件名前缀,没有分散的数字)。

方法2:正则表达式(更灵活)

如果后续文件名里数字可能分散在不同位置,用正则匹配并移除所有非数字字符会更稳妥:

import re
id_part = re.sub(r'\D', '', title)  # \D匹配所有非数字字符,替换为空

修正后的完整重命名代码

把提取ID的逻辑整合到你的函数里,同时修正语法问题,最终代码如下:

def rename(dir_path, pattern):
    import glob
    import os
    import re  # 如果用正则方法需要导入,用字符串过滤可删除此行

    for path_and_filename in glob.iglob(os.path.join(dir_path, pattern)):
        filename = os.path.basename(path_and_filename)
        title, ext = os.path.splitext(filename)
        
        # 提取纯数字ID(二选一即可)
        # 方法1:字符串过滤
        id_part = ''.join(char for char in title if char.isdigit())
        # 方法2:正则替换
        # id_part = re.sub(r'\D', '', title)
        
        # 生成新文件名:ID + map + 后缀
        new_filename = f"{id_part}map{ext}"
        new_path = os.path.join(dir_path, new_filename)
        
        # 先打印预览(建议先测试,确认没问题再取消注释rename)
        print(f"重命名:{filename} -> {new_filename}")
        # os.rename(path_and_filename, new_path)

# 调用示例
import scripts as a
a.rename(r'c:\tools\storeMaps', r'*.pdf')

实用提示

  • 先测试再执行:建议先保留print语句,注释掉os.rename,确认所有新文件名都符合预期后,再执行重命名操作,避免误改文件。
  • 处理重复ID:如果多个文件提取出相同的数字ID,重命名时会覆盖文件,你可以考虑在文件名后加序号(比如035map_1.pdf)来避免冲突。
  • 权限问题:确保你对目标目录有读写权限,否则会抛出权限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:44:16