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
相关产品推荐
相关产品推荐

