当前位置:首页>python>100 个文件要重命名?Python 5 行代码搞定

100 个文件要重命名?Python 5 行代码搞定

  • 2026-10-11 06:02:57
100 个文件要重命名?Python 5 行代码搞定

每次整理文件,你都要做这件事:

  • • 下载了 100 张图片,文件名是乱码
  • • 收到 50 个报表,文件名格式不统一
  • • 要把所有文件名加上日期前缀

然后你手动右键、重命名、输入、回车……重复 100 次。

有没有更好的办法?有,Python 5 行代码搞定。

这篇文章教你用 Python 批量重命名文件,3 分钟学会,终身受益。


场景一:给所有文件加前缀

需求

文件夹里有 100 个文件,要给所有文件名加上日期前缀,比如:

原文件名: report.xlsx新文件名: 2026-05-27_report.xlsx

代码(只需 5 行)

import osfrom datetime import datetimefolder = 'data/'  # 文件夹路径prefix = datetime.now().strftime('%Y-%m-%d') + '_'  # 日期前缀# 批量重命名for filename in os.listdir(folder):    os.rename(folder + filename, folder + prefix + filename)print('重命名完成!')

运行结果

原文件名:report.xlsxsales.xlsxuser.xlsx新文件名:2026-05-27_report.xlsx2026-05-27_sales.xlsx2026-05-27_user.xlsx

场景二:给所有文件加后缀

需求

给所有 Excel 文件加上"_backup"后缀:

原文件名: report.xlsx新文件名: report_backup.xlsx

代码

import osfolder = 'data/'for filename in os.listdir(folder):    if filename.endswith('.xlsx'):  # 只处理 Excel 文件        name, ext = os.path.splitext(filename)  # 分离文件名和后缀        new_name = f'{name}_backup{ext}'        os.rename(folder + filename, folder + new_name)print('重命名完成!')

运行结果

原文件名:report.xlsxsales.xlsxuser.xlsx新文件名:report_backup.xlsxsales_backup.xlsxuser_backup.xlsx

场景三:替换文件名中的字符

需求

把文件名中的空格替换成下划线:

原文件名: sales report.xlsx新文件名: sales_report.xlsx

代码

import osfolder = 'data/'for filename in os.listdir(folder):    if ' ' in filename:  # 文件名中有空格        new_name = filename.replace(' ', '_')  # 空格替换为下划线        os.rename(folder + filename, folder + new_name)        print(f'{filename} -> {new_name}')print('重命名完成!')

运行结果

sales report.xlsx -> sales_report.xlsxuser data.xlsx -> user_data.xlsxmonthly report.xlsx -> monthly_report.xlsx重命名完成!

场景四:批量修改文件名格式

需求

把中文日期改成英文格式:

原文件名: 报表_2026年05月27日.xlsx新文件名: report_20260527.xlsx

代码

import osimport refolder = 'data/'for filename in os.listdir(folder):    # 提取日期    match = re.search(r'(\d{4})年(\d{2})月(\d{2})日', filename)    if match:        year, month, day = match.groups()        new_date = f'{year}{month}{day}'        new_name = f'report_{new_date}.xlsx'        os.rename(folder + filename, folder + new_name)        print(f'{filename} -> {new_name}')print('重命名完成!')

运行结果

报表_2026年05月27日.xlsx -> report_20260527.xlsx报表_2026年05月28日.xlsx -> report_20260528.xlsx报表_2026年05月29日.xlsx -> report_20260529.xlsx重命名完成!

场景五:按序号重命名

需求

把所有图片按序号重命名:

原文件名: IMG_001.jpg, photo.png, 截图.jpg新文件名: 001.jpg, 002.jpg, 003.jpg

代码

import osfolder = 'images/'# 获取所有图片文件files = [f for f in os.listdir(folder) if f.endswith(('.jpg', '.png', '.jpeg'))]# 按序号重命名for i, filename in enumerate(files, 1):    ext = os.path.splitext(filename)[1]  # 获取后缀    new_name = f'{i:03d}{ext}'  # 001.jpg, 002.jpg...    os.rename(folder + filename, folder + new_name)    print(f'{filename} -> {new_name}')print(f'重命名完成!共 {len(files)} 个文件')

运行结果

IMG_001.jpg -> 001.jpgphoto.png -> 002.png截图.jpg -> 003.jpg重命名完成!共 3 个文件

场景六:从 Excel 读取新文件名

需求

有一个 Excel 文件,记录了旧文件名和新文件名的对应关系,批量重命名。

Excel 内容

旧文件名
新文件名
old_1.xlsx
2026Q1_sales.xlsx
old_2.xlsx
2026Q2_sales.xlsx
old_3.xlsx
2026Q3_sales.xlsx

代码

import osimport pandas as pdfolder = 'data/'mapping_file = 'rename_mapping.xlsx'# 读取映射关系df = pd.read_excel(mapping_file)# 批量重命名for _, row in df.iterrows():    old_name = row['旧文件名']    new_name = row['新文件名']    if os.path.exists(folder + old_name):        os.rename(folder + old_name, folder + new_name)        print(f'{old_name} -> {new_name}')    else:        print(f'文件不存在: {old_name}')print('重命名完成!')

运行结果

old_1.xlsx -> 2026Q1_sales.xlsxold_2.xlsx -> 2026Q2_sales.xlsxold_3.xlsx -> 2026Q3_sales.xlsx重命名完成!

场景七:递归重命名子文件夹

需求

文件夹下还有子文件夹,要递归处理所有文件。

代码

import osfolder = 'data/'# 递归遍历所有文件for root, dirs, files in os.walk(folder):    for filename in files:        if ' ' in filename:            old_path = os.path.join(root, filename)            new_name = filename.replace(' ', '_')            new_path = os.path.join(root, new_name)            os.rename(old_path, new_path)            print(f'{old_path} -> {new_name}')print('重命名完成!')

常见问题

Q1:如何撤销重命名?

先备份原文件名列表:

import osimport pandas as pdfolder = 'data/'# 保存原文件名files = os.listdir(folder)df = pd.DataFrame({'原文件名': files})df.to_excel('original_names.xlsx', index=False)print('原文件名已备份!')

然后如果需要恢复,用场景六的方法。

Q2:文件名冲突怎么办?

检查新文件名是否已存在:

import osfolder = 'data/'prefix = '2026-05-27_'for filename in os.listdir(folder):    new_name = prefix + filename    # 检查新文件名是否已存在    if os.path.exists(folder + new_name):        print(f'文件名冲突: {new_name},跳过')        continue    os.rename(folder + filename, folder + new_name)print('重命名完成!')

Q3:只处理特定类型的文件?

import osfolder = 'data/'# 只处理 Excel 和 CSV 文件allowed_extensions = ('.xlsx', '.xls', '.csv')for filename in os.listdir(folder):    if filename.endswith(allowed_extensions):        # 重命名逻辑        pass

Q4:如何预览重命名结果?

先打印预览,确认无误再执行:

import osfolder = 'data/'prefix = '2026-05-27_'# 预览模式print('预览重命名结果:')for filename in os.listdir(folder):    new_name = prefix + filename    print(f'{filename} -> {new_name}')# 确认后执行confirm = input('确认执行吗?(y/n): ')if confirm.lower() == 'y':    for filename in os.listdir(folder):        os.rename(folder + filename, folder + prefix + filename)    print('重命名完成!')else:    print('已取消')

完整代码模板(复制即用)

import osimport pandas as pdfrom datetime import datetimedef batch_rename(folder, mode='prefix', pattern='', mapping_file=None):    """    批量重命名文件    参数:    - folder: 文件夹路径    - mode: 重命名模式(prefix/suffix/replace/sequence/mapping)    - pattern: 前缀/后缀/替换内容    - mapping_file: 映射文件路径(mapping模式使用)    """    if not os.path.exists(folder):        print('文件夹不存在!')        return    # 备份原文件名    files = os.listdir(folder)    backup = pd.DataFrame({'原文件名': files})    backup.to_excel('rename_backup.xlsx', index=False)    if mode == 'prefix':        # 加前缀        for filename in files:            os.rename(folder + filename, folder + pattern + filename)    elif mode == 'suffix':        # 加后缀        for filename in files:            name, ext = os.path.splitext(filename)            os.rename(folder + filename, folder + name + pattern + ext)    elif mode == 'replace':        # 替换字符        old, new = pattern.split('->')        for filename in files:            if old in filename:                os.rename(folder + filename, folder + filename.replace(old, new))    elif mode == 'sequence':        # 按序号重命名        for i, filename in enumerate(files, 1):            ext = os.path.splitext(filename)[1]            os.rename(folder + filename, folder + f'{i:03d}{ext}')    elif mode == 'mapping':        # 从Excel读取映射        df = pd.read_excel(mapping_file)        for _, row in df.iterrows():            if os.path.exists(folder + row['旧文件名']):                os.rename(folder + row['旧文件名'], folder + row['新文件名'])    print(f'重命名完成!共处理 {len(files)} 个文件')# 使用示例# batch_rename('data/', mode='prefix', pattern='2026-05-27_')# batch_rename('data/', mode='suffix', pattern='_backup')# batch_rename('data/', mode='replace', pattern=' ->_')# batch_rename('data/', mode='sequence')# batch_rename('data/', mode='mapping', mapping_file='rename_mapping.xlsx')

总结

Python 批量重命名文件,核心就 2 个函数:

函数
用途
示例
os.listdir()
获取文件列表
os.listdir('data/')
os.rename()
重命名文件
os.rename('old.txt', 'new.txt')

5 行代码,解决 100 个文件重命名的重复劳动。


进阶方向

学会批量重命名后,可以继续扩展:

  1. 1. 批量移动文件:按类型分类到不同文件夹
  2. 2. 批量压缩文件:多个文件打包成 ZIP
  3. 3. 批量删除文件:按条件删除不需要的文件
  4. 4. 定时自动整理:每天自动整理下载文件夹

Python 是分析师的效率神器,从一个小脚本开始,逐步积累你的工具箱。

最新文章

随机文章