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

Python批量重命名文件夹文件:通配符使用与规则匹配咨询

批量重命名公司文件的Python代码优化

我正在编写代码以每月批量重命名公司文件夹内的文件,目前这项工作需手动完成。我是Python新手,正在学习《Python Crash Course》中的列表章节。

我已写出以下代码,但存在疑问:

import os
import glob

#Asks the user for the current month for renaming and for the path of the
#files
month = input("Which month's reports? Type the full name of the month: ")
path = input("Enter the file path: ")

pattern = path + "\A_BCD_012345" + "*.pdf"

result = glob.glob(pattern)

for file_name in result:
    old_name = file_name
    new_name = path + '\\' + old_name[90:99] + month + ' Report' + old_name[-4:]
    print(new_name)

当前代码灵活性不足,我想了解如何使用通配符优化。文件命名格式固定为:A_BCD_0123456_20220901_20220930_02_V2_0000_00000_FILE_5-8 digits number which is important to keep_AB0001.pdf

我希望将文件重命名为:5-8位关键数字 + 公司名称 + 当前月份 Report。

关键数字始终位于第10个下划线之后、第11个下划线之前,第11个下划线后的内容需全部舍弃。我还未添加os.rename函数,目前仅对通配符的使用存在困惑,请问该如何完善代码?


解决方案

1. 优化通配符匹配

原代码的通配符拼接存在路径分隔符的兼容问题,且匹配范围太窄。改用os.path.join自动处理路径分隔符,同时用更灵活的通配符匹配所有符合前缀规则的PDF文件:

  • 匹配模式改为os.path.join(path, "A_BCD_*.pdf"),不管中间的数字段如何变化,都能精准命中目标文件。

2. 提取关键数字

利用文件名的固定下划线分隔结构,直接通过分割列表提取关键数字,比固定切片更可靠:

  • 先从完整路径中提取纯文件名:file_basename = os.path.basename(file_name)
  • 按下划线分割成列表:parts = file_basename.split('_')
  • 关键数字对应列表的第11个元素(索引为10):parts[10]

3. 完善重命名逻辑

用os.path.join拼接新路径避免手动处理分隔符,添加预览打印确认后再执行重命名,降低误操作风险。


完整优化代码

import os
import glob

# 获取用户输入
month = input("Which month's reports? Type the full name of the month: ")
path = input("Enter the file path: ")

# 优化通配符:匹配所有以A_BCD_开头的PDF文件
pattern = os.path.join(path, "A_BCD_*.pdf")
target_files = glob.glob(pattern)

# 替换为实际公司名称
company_name = "Your Company Name"

for old_file_path in target_files:
    # 提取纯文件名(移除路径前缀)
    old_filename = os.path.basename(old_file_path)
    # 按下划线分割文件名
    filename_parts = old_filename.split('_')
    
    # 提取第10个下划线后的关键数字
    key_number = filename_parts[10]
    
    # 构建新文件名
    new_filename = f"{key_number}_{company_name}_{month} Report.pdf"
    new_file_path = os.path.join(path, new_filename)
    
    # 先打印预览重命名规则,确认无误后取消注释os.rename
    print(f"待重命名: {old_filename} → {new_filename}")
    # os.rename(old_file_path, new_file_path)

代码说明

  • os.path.join:自动适配Windows/macOS/Linux的路径分隔符,避免手动拼接\或/的错误
  • split('_'):通过固定结构提取关键数字,不受前面字段长度变化影响,比固定切片更灵活
  • 预览打印:先确认重命名规则正确,再启用os.rename执行实际操作,防止误改文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:55:18