Python基础入门 Day79 文件批量重命名实战

140次阅读
没有评论

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

在日常工作中,我们经常会遇到文件命名杂乱无章的情况,例如下载的图片命名为 IMG_001.jpgIMG_002.jpg 等,而我们可能希望统一成 photo_1.jpgphoto_2.jpg 这样的格式。Python 提供了简洁的方法来实现文件批量重命名。

  1. 导入模块
    我们只需要 os 模块来获取文件并执行重命名操作。
import os
  1. 批量重命名函数
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
  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
  1. 进阶功能扩展
  • 选择性重命名 :只重命名 .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
  • 避免文件覆盖 :如果文件名已存在,自动在后面加上时间戳或序号。
  • 支持多目录 :递归遍历文件夹,重命名所有子目录文件。

总结:
批量重命名大大提高了文件整理效率,尤其在处理大量下载文件、照片、实验数据时非常有用。通过自定义前缀、文件类型过滤和冲突处理,可以让程序更实用。

练习与思考:

  1. 修改程序,让文件名包含日期,例如 photo_2025_1.jpg
  2. 添加一个参数,使得可以选择是否保留原始文件名的一部分。
  3. 尝试将这个功能和前一节的“文件整理”功能结合起来,做成一个完整的自动化工具。
正文完
 0
评论(没有评论)