如何用 Python 批量重命名文件:一步一步的教程

38次阅读
没有评论

共计 3154 个字符,预计需要花费 8 分钟才能阅读完成。

在日常工作中,我们经常会遇到需要批量重命名文件的情况,比如整理照片、处理数据文件等。如果手动修改不仅耗时,而且容易出错。Python 提供了强大的 osshutil 模块,可以帮助我们高效地批量重命名文件。本文将介绍如何使用 Python 逐步实现这一任务。


1. 准备工作

安装 Python

如果你的电脑还没有安装 Python,可以前往 Python 官网 下载并安装最新版本。

导入必要的库

在 Python 脚本中,我们主要用到 os 模块(用于操作文件和目录),可以直接导入:

import os

如果你需要更复杂的文件操作,比如移动文件,可以额外导入 shutil

import shutil

2. 获取目标文件

在批量重命名前,我们需要先获取目标目录下的所有文件。可以使用 os.listdir() 方法:

folder_path = "C:/Users/YourName/Documents/TargetFolder"  # 修改为你的文件夹路径

# 获取文件夹中的所有文件
files = os.listdir(folder_path)

# 只打印前 5 个文件看一下
print(files[:5])

注意

  • 路径应根据你的操作系统修改,Windows 使用 C:/Users/...,Mac/Linux 可能是 /Users/.../home/...
  • os.listdir() 获取的是文件夹下的所有文件和文件夹,因此如果只想处理特定类型的文件(如 .jpg),可以使用 filter() 进行筛选:
files = [f for f in files if f.endswith(".jpg")]
print(files[:5])

3. 设计重命名规则

在批量重命名时,我们通常会有一定的命名规则。例如:

  • 统一添加前缀或后缀(如 IMG_001.jpgVacation_001.jpg)。
  • 使用编号重命名(如 photo1.jpgimage_0001.jpg)。
  • 根据文件创建日期重命名。

4. 批量重命名

方案 1:添加前缀

如果只是给所有文件添加前缀,例如在所有 .jpg 文件前加上 Vacation_

for file in files:
    old_path = os.path.join(folder_path, file)  # 旧文件路径
    new_name = "Vacation_" + file  # 添加前缀
    new_path = os.path.join(folder_path, new_name)  # 新文件路径
    os.rename(old_path, new_path)  # 重命名操作

print("文件重命名完成!")

方案 2:批量编号

如果希望文件按顺序重命名,如 photo1.jpg, photo2.jpg 改成 image_0001.jpg, image_0002.jpg

for index, file in enumerate(files, start=1):
    old_path = os.path.join(folder_path, file)
    new_name = f"image_{index:04d}.jpg"  # 例如 image_0001.jpg
    new_path = os.path.join(folder_path, new_name)
    os.rename(old_path, new_path)

print("文件重命名完成!")

解释

  • enumerate(files, start=1) 会给文件从 1 开始编号。
  • f"image_{index:04d}.jpg" 会生成 image_0001.jpg 这种格式,确保编号对齐。

方案 3:按文件创建日期重命名

如果想根据文件创建时间命名,例如 20240101_120000.jpg 代表 2024 年 1 月 1 日 12:00:00:

import time

for file in files:
    old_path = os.path.join(folder_path, file)
    timestamp = os.path.getctime(old_path)  # 获取创建时间(秒)formatted_time = time.strftime("%Y%m%d_%H%M%S", time.localtime(timestamp))
    new_name = f"{formatted_time}.jpg"
    new_path = os.path.join(folder_path, new_name)
    os.rename(old_path, new_path)

print("文件重命名完成!")

5. 处理文件名重复问题

有时候,新的文件名可能会与现有文件名冲突,比如 image_0001.jpg 已经存在。这时,我们可以检查文件是否已存在,并在文件名后加 _1 解决冲突:

def get_unique_filename(folder, name):
    base, ext = os.path.splitext(name)  # 分离文件名和扩展名
    counter = 1
    new_name = name

    while os.path.exists(os.path.join(folder, new_name)):  # 检查文件是否存在
        new_name = f"{base}_{counter}{ext}"
        counter += 1

    return new_name

for file in files:
    old_path = os.path.join(folder_path, file)
    new_name = get_unique_filename(folder_path, f"image_{file}")
    new_path = os.path.join(folder_path, new_name)
    os.rename(old_path, new_path)

print("文件重命名完成!")

6. 备份原始文件(可选)

如果不想直接修改文件名,可以先备份原始文件到一个新文件夹:

backup_folder = os.path.join(folder_path, "backup")
os.makedirs(backup_folder, exist_ok=True)  # 创建备份文件夹

for file in files:
    shutil.copy(os.path.join(folder_path, file), os.path.join(backup_folder, file))

print("备份完成!")

7. 进阶:使用 GUI 交互

如果想要更友好的交互方式,可以用 tkinter 创建一个简单的 GUI:

import tkinter as tk
from tkinter import filedialog

def select_folder():
    folder_selected = filedialog.askdirectory()
    entry_var.set(folder_selected)

root = tk.Tk()
root.title("选择文件夹")
entry_var = tk.StringVar()

tk.Entry(root, textvariable=entry_var, width=50).pack(padx=10, pady=10)
tk.Button(root, text="浏览", command=select_folder).pack(pady=5)
tk.Button(root, text="退出", command=root.quit).pack(pady=5)

root.mainloop()

这个界面可以让用户手动选择文件夹,再配合前面的代码进行批量重命名。


总结

在本文中,我们学习了如何使用 Python 批量重命名文件,包括:

  • 读取文件列表
  • 设计不同的重命名方案(添加前缀、按编号重命名、按创建时间命名)
  • 解决文件名重复问题
  • 备份文件
  • 使用 GUI 进行交互

Python 的 osshutil 模块让批量重命名变得简单高效,你可以根据自己的需求调整代码,进一步优化流程。试试看,让你的文件管理更加高效吧!

正文完
 0
评论(没有评论)