python文件批量改名

以下是使用Python实现文件批量重命名的示例代码,包含多种常见场景的解决方案:

import os
import re
from datetime import datetime

def batch_rename(path, mode=1, **kwargs):
    """
    文件批量重命名工具
    参数:
    path: 目标文件夹路径
    mode: 重命名模式
        1 - 顺序编号
        2 - 添加前缀/后缀
        3 - 正则替换
        4 - 时间戳命名
        5 - 自定义函数处理
    kwargs: 根据模式传递不同参数
    """
    files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
    
    for index, filename in enumerate(files, start=1):
        old_path = os.path.join(path, filename)
        name, ext = os.path.splitext(filename)
        
        # 模式1:顺序编号
        if mode == 1:
            new_name = f"{kwargs.get('prefix', '')}{index:03d}{ext}"
        
        # 模式2:添加前后缀
        elif mode == 2:
            new_name = f"{kwargs.get('prefix', '')}{name}{kwargs.get('suffix', '')}{ext}"
        
        # 模式3:正则替换
        elif mode == 3:
            pattern = re.compile(kwargs['pattern'])
            new_name = pattern.sub(kwargs['repl'], name) + ext
        
        # 模式4:时间戳命名
        elif mode == 4:
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            new_name = f"{timestamp}_{index}{ext}"
        
        # 模式5:自定义处理函数
        elif mode == 5:
            new_name = kwargs['custom_func'](filename)
        
        else:
            raise ValueError("Invalid mode selected")
        
        new_path = os.path.join(path, new_name)
        os.rename(old_path, new_path)
        print(f"Renamed: {filename} -> {new_name}")

# 使用示例
if __name__ == "__main__":
    target_dir = "./test_files"  # 修改为你的目标目录
    
    # 示例1:顺序编号(添加前缀)
    batch_rename(target_dir, mode=1, prefix="doc_")
    
    # 示例2:添加日期后缀
    today = datetime.now().strftime("%Y%m%d")
    batch_rename(target_dir, mode=2, suffix=f"_{today}")
    
    # 示例3:正则替换(删除所有数字)
    batch_rename(target_dir, mode=3, pattern=r'\d+', repl='')
    
    # 示例4:自定义处理函数(首字母大写)
    def custom_rename(filename):
        name, ext = os.path.splitext(filename)
        return f"{name.capitalize()}{ext}"
    
    batch_rename(target_dir, mode=5, custom_func=custom_rename)

功能说明:

  1. 顺序编号模式:为文件添加连续数字编号

    • prefix参数可设置编号前缀
    • 格式示例:doc_001.txt, doc_002.txt
  2. 前后缀模式

    • 可同时添加前缀和后缀
    • 示例:file_20230801_backup.txt
  3. 正则替换模式

    • 使用正则表达式匹配文件名中的特定模式进行替换
    • 示例:将文件名中的日期格式从YYYYMMDD改为YYYY-MM-DD
  4. 时间戳模式

    • 自动生成时间戳+序号组合的文件名
    • 格式示例:20230801_143022_001.txt
  5. 自定义函数模式

    • 支持通过自定义函数实现复杂重命名逻辑
    • 示例:文件名首字母大写、根据文件内容生成名称等

使用建议:

  1. 先在小范围文件测试后再正式使用
  2. 重要文件操作前建议备份
  3. 可通过修改files列表的生成逻辑实现:
    • 仅处理特定扩展名文件:[f for f in files if f.endswith('.txt')]
    • 排除特定文件:[f for f in files if not f.startswith('.')]
    • 按文件时间排序:sorted(files, key=lambda x: os.path.getmtime(x))

扩展功能建议:

  1. 添加文件过滤功能(按扩展名、大小、修改时间等)
  2. 支持递归处理子目录
  3. 添加撤销功能(记录重命名历史)
  4. 创建图形界面(可结合tkinter实现)

根据具体需求选择适合的模式并调整参数即可实现灵活的文件批量重命名操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

detayun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值