如何修改Python脚本批量重命名匹配原文件名的所有扩展名文件
批量重命名脚本修改方案
核心修改逻辑
- 移除原脚本的扩展名入参,无需手动指定需要重命名的文件后缀
- 提前加载CSV映射表为字典,提升匹配效率
- 遍历目标目录下的所有文件,只要文件名以
{原始名}.开头即可命中,通过单次分割文件名的方式提取完整后缀,天然支持.txt、.bam、.txt.readdb.log等任意长度的扩展名格式 - 替换原路径拼接逻辑为
os.path.join,兼容不同操作系统的路径规则 - 补充原代码缺失的
sys模块导入
修改后完整代码
import os import csv import sys def rename_files(path, name_map): # 加载文件名映射表 orig_to_new = {} with open(name_map, 'r', encoding='utf-8') as csv_map: filereader = csv.DictReader(csv_map) for row in filereader: orig_name = row["original"].strip() new_name = row["new"].strip() orig_to_new[orig_name] = new_name # 遍历目录下所有文件执行重命名 for filename in os.listdir(path): old_filepath = os.path.join(path, filename) # 跳过子目录,仅处理文件 if not os.path.isfile(old_filepath): continue # 匹配原始文件名前缀 for orig_name, new_prefix in orig_to_new.items(): if filename.startswith(f"{orig_name}."): # 提取完整后缀(支持多段长扩展名) suffix = filename.split('.', 1)[1] new_filename = f"{new_prefix}_{orig_name}.{suffix}" new_filepath = os.path.join(path, new_filename) try: os.rename(old_filepath, new_filepath) print(f"重命名成功:{filename} → {new_filename}") except Exception as e: print(f"重命名失败:{filename},错误信息:{str(e)}") # 匹配到对应规则后跳出循环,避免重复处理 break if __name__ == '__main__': _, path, name_map = sys.argv rename_files(path, name_map)
使用方法
运行命令无需再传入扩展名参数,格式如下:
python rename.py 待重命名目录路径 CSV映射文件路径
示例:
python rename.py /test/directory filestorename.csv
效果示例
若目标目录下存在以下文件:
- barcode01.txt
- barcode01.png
- barcode01.txt.readdb.log
- barcode02.bam
运行脚本后会自动重命名为:
- sample01_barcode01.txt
- sample01_barcode01.png
- sample01_barcode01.txt.readdb.log
- sample02_barcode02.bam
内容的提问来源于stack exchange,提问作者J-6474
相关产品推荐
相关产品推荐

