共计 1433 个字符,预计需要花费 4 分钟才能阅读完成。
在日常工作中,我们经常会遇到文件命名杂乱无章的情况,例如下载的图片命名为 IMG_001.jpg、IMG_002.jpg 等,而我们可能希望统一成 photo_1.jpg、photo_2.jpg 这样的格式。Python 提供了简洁的方法来实现文件批量重命名。
- 导入模块
我们只需要os模块来获取文件并执行重命名操作。
import os
- 批量重命名函数
def batch_rename(folder_path, prefix):
files = os.listdir(folder_path)
index = 1
for filename in files:
file_path = os.path.join(folder_path, filename)
if os.path.isfile(file_path):
_, ext = os.path.splitext(filename) # 拆分文件名和扩展名
new_name = f"{prefix}_{index}{ext}"
new_path = os.path.join(folder_path, new_name)
os.rename(file_path, new_path)
print(f"{filename} -> {new_name}")
index += 1
- 使用示例
假设我们有一个images文件夹,里面有:
IMG_001.jpg
IMG_002.jpg
IMG_003.jpg
运行以下代码:
if __name__ == "__main__":
folder = "./images"
batch_rename(folder, "photo")
执行结果:
IMG_001.jpg -> photo_1.jpg
IMG_002.jpg -> photo_2.jpg
IMG_003.jpg -> photo_3.jpg
最终 images 文件夹内容:
photo_1.jpg
photo_2.jpg
photo_3.jpg
- 进阶功能扩展
- 选择性重命名 :只重命名
.jpg文件。
def batch_rename_with_filter(folder_path, prefix, ext_filter=".jpg"):
files = os.listdir(folder_path)
index = 1
for filename in files:
file_path = os.path.join(folder_path, filename)
if os.path.isfile(file_path) and filename.endswith(ext_filter):
_, ext = os.path.splitext(filename)
new_name = f"{prefix}_{index}{ext}"
new_path = os.path.join(folder_path, new_name)
os.rename(file_path, new_path)
print(f"{filename} -> {new_name}")
index += 1
- 避免文件覆盖 :如果文件名已存在,自动在后面加上时间戳或序号。
- 支持多目录 :递归遍历文件夹,重命名所有子目录文件。
总结:
批量重命名大大提高了文件整理效率,尤其在处理大量下载文件、照片、实验数据时非常有用。通过自定义前缀、文件类型过滤和冲突处理,可以让程序更实用。
练习与思考:
- 修改程序,让文件名包含日期,例如
photo_2025_1.jpg。 - 添加一个参数,使得可以选择是否保留原始文件名的一部分。
- 尝试将这个功能和前一节的“文件整理”功能结合起来,做成一个完整的自动化工具。
正文完