在日常工作中,我们常常需要对大量文件进行重命名操作。这种需求可能源于文件名不规范、需要统一格式,或是为了便于文件管理。然而,手动修改大量文件名不仅费时费力,还容易出错。本文将介绍如何使用Python脚本实现批量修改文件名,帮助你提高工作效率。

为什么选择Python来修改文件名?

Python 作为一种强大且易学的编程语言,在处理文件和目录操作时表现尤为出色。借助 Python 的内置库 osos.path,我们可以轻松地实现文件遍历、路径操作和文件名修改等功能。相比于手动操作或依赖其他工具,Python脚本的优势在于:

  • 自动化:一次编写,多次执行,适用于各种场景。
  • 可定制:根据不同需求,自由定义文件名修改规则。
  • 可扩展:随着需求变化,轻松调整或增加功能。

核心实现思路

在实现批量修改文件名的过程中,主要涉及以下几个步骤:

  1. 遍历目标目录:通过Pythonos.walk() 方法遍历指定目录下的所有文件和子目录。
  2. 过滤文件和目录:区分文件和目录,仅对文件进行重命名。
  3. 定义重命名规则:根据实际需求定义文件名修改的规则,如统一大小写、添加前缀或后缀、替换部分字符串等。
  4. 执行重命名操作:调用 os.rename() 方法,将旧文件名替换为新文件名。

示例代码与详细解析

以下是一个完整的Python脚本,示范如何批量修改目录中所有文件的文件名,并排除目录本身:

import os
import logging

# 配置日志
logging.basicConfig(
    filename='file_rename.log',  # 日志文件名
    level=logging.INFO,          # 日志级别
    format='%(asctime)s - %(levelname)s - %(message)s',  # 日志格式
)

def rename_files_in_directory(directory, rename_function):
    try:
        # 遍历目录中的所有文件和子目录
        for root, dirs, files in os.walk(directory):
            for file_name in files:
                try:
                    # 获取文件的完整路径
                    old_file_path = os.path.join(root, file_name)
                    # 使用传入的重命名函数生成新文件名
                    new_file_name = rename_function(file_name)
                    new_file_path = os.path.join(root, new_file_name)
                    
                    # 检查新文件名是否已存在,避免冲突
                    if os.path.exists(new_file_path):
                        logging.warning(f"File already exists: {new_file_path}, skipping rename.")
                        continue
                    
                    # 重命名文件
                    os.rename(old_file_path, new_file_path)
                    logging.info(f"Renamed: {old_file_path} -> {new_file_path}")
                
                except Exception as e:
                    # 捕获单个文件重命名时的异常并记录错误信息
                    logging.error(f"Failed to rename {file_name} in {root}: {str(e)}")
    except Exception as e:
        # 捕获整个遍历过程中可能出现的异常
        logging.critical(f"Critical error while processing directory {directory}: {str(e)}")

def simple_rename(file_name):
    # 简单的重命名函数,将文件名全部改为小写
    return file_name.lower()

# 指定需要处理的目录路径
directory_path = '/path/to/your/directory'

# 调用重命名函数
rename_files_in_directory(directory_path, simple_rename)

1. os.walk() 的使用

os.walk() 是一个生成器,它允许我们遍历指定目录下的所有子目录和文件。对于每个目录,os.walk() 返回一个三元组 (root, dirs, files),其中 root 是当前目录路径,dirs 是该目录下的子目录列表,files 是该目录下的文件列表。

2. 文件名重命名规则

在示例中,我们定义了一个简单的重命名函数 simple_rename(),它将文件名转换为小写。你可以根据自己的需求,修改或扩展这个函数。例如,你可以添加一个前缀或后缀、替换特定字符、按序号重命名等。

def custom_rename(file_name):
    # 添加前缀和后缀示例
    return f"prefix_{file_name}_suffix"

3. os.rename() 实现文件重命名

os.rename(old_path, new_path) 方法用于重命名文件或目录。它接受两个参数:旧文件路径和新文件路径。如果新文件路径已存在,将会覆盖旧文件。因此,在执行批量重命名操作前,务必确保新文件名不会冲突。

脚本演示

例如某个目录有如下图所示的文件,由于项目的结算需要,对文件名有特殊的要求。现需要把下图所有文件名格式修改成灾备中心备份系统巡检表运行情况(2024年6月1日).pdf。这种格式的名称。

因此,我们只需要对simple_rename这个函数进行改写即可实现需求。关键代码如下:

def simple_rename(file_name):
    # 简单的重命名函数,将文件名全部改为小写
    return "灾备中心备份系统巡检表运行情况({}).pdf".format(file_name.split("-")[1][0:11])

执行成功后,该目录下的所有文件都重新命名了,如下图所示:

五、总结

通过本文的介绍,相信你已经掌握了如何利用Python脚本实现批量修改文件名。这种方法不仅灵活高效,还可以根据不同需求进行定制和扩展。在日常工作中,借助Python脚本,你可以更轻松地处理文件管理任务,提高工作效率。如果你有更多的文件操作需求,不妨尝试用Python来解决,相信你会发现它的更多潜力。