共计 3154 个字符,预计需要花费 8 分钟才能阅读完成。
在日常工作中,我们经常会遇到需要批量重命名文件的情况,比如整理照片、处理数据文件等。如果手动修改不仅耗时,而且容易出错。Python 提供了强大的 os 和 shutil 模块,可以帮助我们高效地批量重命名文件。本文将介绍如何使用 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.jpg→Vacation_001.jpg)。 - 使用编号重命名(如
photo1.jpg→image_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 的 os 和 shutil 模块让批量重命名变得简单高效,你可以根据自己的需求调整代码,进一步优化流程。试试看,让你的文件管理更加高效吧!