Python批量改名案例如何批量修改文件名

wen python案例 23

Python批量改名案例,教你如何一键修改文件名

目录导读

  1. 为什么需要批量修改文件名
  2. 批量改名的核心逻辑与Python优势
  3. 基础案例:统一添加前缀/后缀
  4. 进阶案例:按规则替换文件名中的字符
  5. 高阶案例:从Excel列表中读取新名称
  6. 常见问题与解决方案(Q&A)
  7. 安全执行批量操作的注意事项
  8. 让重复工作自动化

为什么需要批量修改文件名

在日常工作中,无论是整理照片、管理文档,还是处理项目文件,我们经常遇到需要统一修改文件名的情况,将数百张“IMG_001.jpg”改为“2024年会照片_001.jpg”,或者将“报告-v1.docx”改为“最终报告.docx”,如果手动逐个重命名,不仅耗时且容易出错,Python作为一种高效的编程语言,通过osshutil模块,可以轻松实现批量文件名修改,将原本需要半小时的工作压缩到几秒钟。

Python批量改名案例如何批量修改文件名

批量改名的核心逻辑与Python优势

批量改名的核心逻辑是:遍历目标文件夹中的每个文件 → 提取原文件名 → 应用转换规则 → 执行重命名,Python的优势在于:

  • 跨平台:Windows、macOS、Linux通用。
  • 灵活度高:支持正则表达式、条件判断、外部数据导入。
  • 安全可控:可先预览再执行,避免误操作。

所有案例均基于内置模块,无需安装第三方库,以下代码建议在副本文件夹中测试。

基础案例:统一添加前缀/后缀

为所有文件添加前缀“会议资料_”

import os
folder_path = r"C:\待处理文件夹"  # 修改为实际路径
prefix = "会议资料_"
for filename in os.listdir(folder_path):
    full_path = os.path.join(folder_path, filename)
    if os.path.isfile(full_path):  # 仅处理文件
        new_name = prefix + filename
        os.rename(full_path, os.path.join(folder_path, new_name))
        print(f"已重命名: {filename} → {new_name}")

添加后缀(在扩展名前插入)

import os
folder = r"C:\照片"
suffix = "_高清"
for f in os.listdir(folder):
    old = os.path.join(folder, f)
    if os.path.isfile(old):
        name, ext = os.path.splitext(f)
        new_name = name + suffix + ext
        os.rename(old, os.path.join(folder, new_name))

进阶案例:按规则替换文件名中的字符

案例:将所有空格替换为下划线

import os
folder = r"C:\文档"
for f in os.listdir(folder):
    old = os.path.join(folder, f)
    if os.path.isfile(old):
        new_f = f.replace(" ", "_")  # 替换空格
        os.rename(old, os.path.join(folder, new_f))

案例:跳过不需要修改的文件

import os
folder = r"C:\项目文件"
skip_keywords = ["临时", "备份"]
for f in os.listdir(folder):
    if any(skip in f for skip in skip_keywords):
        continue  # 跳过包含“临时”或“备份”的文件
    # 此处可继续添加修改逻辑

高阶案例:从Excel列表中读取新名称

当需要将文件改为特定名称(如客户名单对应文件)时,可结合pandas(需安装)实现。

import os
import pandas as pd
# 假设Excel有两列:原文件名、新文件名
df = pd.read_excel(r"C:\重命名列表.xlsx")
folder = r"C:\待处理文件"
for index, row in df.iterrows():
    old_name = row["原文件名"]
    new_name = row["新文件名"]
    old_path = os.path.join(folder, old_name)
    new_path = os.path.join(folder, new_name)
    if os.path.exists(old_path):
        os.rename(old_path, new_path)
        print(f"完成: {old_name} → {new_name}")
    else:
        print(f"未找到: {old_name}")

提示:若不想安装pandas,可使用csv模块处理纯文本表格。

常见问题与解决方案(Q&A)

Q1:如何避免误删文件?

A:重命名前先打印预览,确认无误再执行:

# 预览模式(不实际执行)
for filename in os.listdir(folder):
    new_name = "新前缀_" + filename
    print(f"将修改: {filename} → {new_name}")
# 确认后移除上面的print,改用os.rename

Q2:文件名包含中文或特殊字符出错怎么办?

A:确保Python文件头部声明编码:

# -*- coding: utf-8 -*-

同时,使用Unicode字符串,如folder = u"C:\我的文件"(Python2)或直接在Python3中使用普通字符串。

Q3:如何处理子文件夹内的文件?

A:使用os.walk()递归遍历所有子目录:

for root, dirs, files in os.walk(folder):
    for f in files:
        old = os.path.join(root, f)
        new = os.path.join(root, "新前缀_" + f)
        os.rename(old, new)

Q4:重命名时能否保留文件创建日期?

Aos.rename不会改变文件属性(如创建日期),如需修改,需使用win32file等第三方模块,但建议仅保留系统默认属性。

安全执行批量操作的注意事项

  1. 永远在副本文件夹测试:正式操作前,复制一份文件到临时目录运行代码,确认结果无误。
  2. 使用日志记录:添加运行日志,方便回溯:
    import logging
    logging.basicConfig(filename='rename_log.txt', level=logging.INFO)
    logging.info(f"修改: {old_name} → {new_name}")
  3. 避免修改系统文件:操作前过滤系统隐藏文件(如desktop.ini)和正在被占用的文件。
  4. 处理文件名冲突:如果两个文件重名,默认会报错,建议使用os.path.exists检查:
    if not os.path.exists(new_path):
        os.rename(old_path, new_path)
    else:
        print(f"跳过冲突: {new_name}")

让重复工作自动化

通过上述Python批量改名案例,你可以轻松应对以下场景:

  • 统一添加前缀/后缀(日期、项目名)
  • 替换特定字符(空格、标点)
  • 从表格导入新名称(客户发票、产品编号)
  • 递归处理子文件夹

掌握这些基础后,你还可以组合正则表达式(re模块)实现更复杂的匹配,例如提取文件名中的日期、删除特定模式等,养成“先预览再执行”的习惯,你的文件管理效率将提升10倍。

打开你的Python环境,用代码代替鼠标点击吧!

抱歉,评论功能暂时关闭!