Python批量重命名照片:让你的照片整理更加高效

Python批量重命名照片:让你的照片整理更加高效

在日常生活中,我们经常会拍摄大量的照片,而这些照片的命名往往比较杂乱,甚至无法一眼辨识出每张照片的具体内容。尤其是当你拍摄了成百上千张照片时,整理和查找变得相当困难。幸运的是,Python的强大功能可以帮助我们批量重命名照片,轻松实现照片的整齐有序!

今天,我将为大家分享如何利用Python实现照片批量重命名的方法。

1. 为什么要批量重命名照片?

当我们拍摄照片时,很多相机或手机会自动生成一些无意义的文件名(例如 IMG_001.jpgIMG_002.jpg 等)。这些文件名不仅难以辨识,而且也不便于分类整理。

通过批量重命名,你可以:

?按照拍摄日期、地点或特定规则重命名照片;?方便后期的整理和查找;?统一照片命名格式,提升工作效率。

2. Python实现批量重命名:基础步骤

我们将使用Python的 os 模块来遍历文件夹中的照片,并使用 rename 方法对文件进行重命名。

下面是实现批量重命名的基本代码:

import os


# 设置图片所在的文件夹路径
folder_path = '你的照片文件夹路径'


# 遍历文件夹中的所有文件
for index, filename in enumerate(os.listdir(folder_path)):
    # 仅对图片文件进行操作,可以根据需求修改扩展名过滤
    if filename.endswith('.jpg') or filename.endswith('.png'):
        # 定义新的文件名格式:例如"photo_1.jpg"
        new_name = f"photo_{index + 1}.jpg"


        # 获取文件的完整路径
        old_file = os.path.join(folder_path, filename)
        new_file = os.path.join(folder_path, new_name)


        # 执行重命名操作
        os.rename(old_file, new_file)
        print(f"{filename} -> {new_name}")

3. 代码解析:一步一步实现

?第1步:设置文件夹路径
你需要将
folder_path 替换为你存放照片的文件夹路径。如果你在 Windows 上,路径应该是类似 r'C:\Users\你的用户名\Pictures'

?第2步:遍历文件夹中的所有文件
我们使用
os.listdir() 方法来列出文件夹中的所有文件,然后遍历它们。这里的 enumerate 函数会给每个文件附加一个索引(从0开始),方便我们创建新的文件名。

?第3步:检查文件类型
我们通过
filename.endswith() 来过滤文件类型,确保只对 .jpg.png 文件进行重命名。如果你有其他类型的图片,可以根据需要修改此部分代码。

?第4步:生成新的文件名
我们使用
f"photo_{index + 1}.jpg" 来构造新的文件名。index + 1 确保文件名从 1 开始,而不是从 0 开始。

?第5步:执行重命名操作
os.rename() 函数接受两个参数,分别是旧文件路径和新文件路径。重命名操作成功后,原文件将被替换为新的文件名。

4. 扩展功能:按日期命名照片?

除了简单的按顺序编号重命名外,我们还可以根据照片的拍摄日期来重命名。这通常需要读取照片的EXIF数据,获取拍摄日期和时间。

以下是一个扩展的代码示例,通过读取照片的EXIF信息来按拍摄日期重命名:

import os
from PIL import Image
from PIL.ExifTags import TAGS
from datetime import datetime


# 设置图片所在的文件夹路径
folder_path = '你的照片文件夹路径'


# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
    # 仅对图片文件进行操作
    if filename.endswith('.jpg') or filename.endswith('.png'):
        old_file = os.path.join(folder_path, filename)


        # 使用PIL库打开图片并获取EXIF数据
        try:
            img = Image.open(old_file)
            exif_data = img._getexif()
            if exif_data is not None:
                for tag, value in exif_data.items():
                    if TAGS.get(tag) == 'DateTime':
                        date_str = value
                        # 格式化日期为新文件名,格式:YYYY-MM-DD_HH-MM-SS.jpg
                        new_name = datetime.strptime(date_str, "%Y:%m:%d %H:%M:%S").strftime("%Y-%m-%d_%H-%M-%S.jpg")
                        new_file = os.path.join(folder_path, new_name)
                        os.rename(old_file, new_file)
                        print(f"{filename} -> {new_name}")
                        break
        except Exception as e:
            print(f"无法处理文件 {filename}: {e}")

5. 代码解析

?读取EXIF数据
我们使用Python的
Pillow 库来读取图片的EXIF数据。EXIF数据包含了拍摄照片时的各种元数据,如日期、相机型号等。通过读取“DateTime”标签,我们可以获取照片的拍摄时间。

?格式化日期
使用
datetime.strptime() 方法将EXIF中的时间字符串转换为 datetime 对象,并通过 strftime() 方法将其格式化为适合的文件名格式。

?异常处理
对于无法读取EXIF数据或其它异常情况,我们使用
try-except 语句来进行错误处理,确保程序的稳定性。

6. 常见问题及解决方法

?问题1:如何处理大批量的图片?
如果你有成千上万的图片,可以考虑在重命名时进行分批处理,避免一次性加载所有文件导致内存占用过大。

?问题2:如何确保代码只对图片文件生效?
使用
filename.endswith() 进行文件类型过滤,仅对 .jpg.png 等格式的图片进行处理,避免误操作。

?问题3:如何保证命名格式的一致性?
在生成新文件名时,确保所有文件的命名格式一致,如按日期、序号等方式统一命名。

7. 总结:Python让批量重命名更高效

通过Python的简单代码,我们可以轻松实现照片的批量重命名,不仅提高了效率,也使得照片的整理更加有序。无论是按顺序编号、还是根据拍摄日期重命名,Python都能为你提供强大的支持。

对于初学者来说,掌握文件操作和EXIF读取功能,将为你的数据处理和项目管理提供极大的帮助。希望本文能够帮助你提高照片管理的效率!


参考资料:

?Pillow库官方文档[1]?Python os模块官方文档[2]

#Python #批量重命名 #图片处理 #数据分析

References

[1] Pillow库官方文档: https://pillow.readthedocs.io/en/stable/
[2] Python os模块官方文档:
https://docs.python.org/3/library/os.html

相关文章

Python自动生成手绘、证件照、九宫格...太炫酷了

Python像是叮当猫的口袋,几乎什么都能做,适合外行小白们去摸索学习,能极大的增加对编程的兴趣。有些工具用python来实现不一定是技术上的最优选择,但可能是最简洁、最面向大众的。介绍几个不错的处理...

教你使用python编程绘制函数图像

函数公式很抽象,图像更直观,但聪明的我们总不会手画图像吧?来学习一下用Python怎么画函数图像吧。首先打开Visual Studio Code(后面简称VSCode),点击New File(中文版是...

新手必看!如何用Python绘制复杂函数图像

在数据可视化的奇妙世界里,Python 就像是一把万能钥匙,能够帮我们打开一扇扇通往复杂函数图像绘制的大门。今天,就跟着我一起来探索如何用 Python 绘制那些令人惊叹的复杂函数图像吧!对于数学爱好...

怎么做到的?用python制作九宫格图片,太棒了

1. ? 应用场景 ?当初的想法是:想把一张图切割成九等份,发布到微信朋友圈,切割出来的图片,上传到朋友圈,发现微信不按照我排列的序号来排版。这样的结果是很耗时间的。让我深思,能不能有一种,直接拼接成...

python调用 stable diffusion批量生成图片代码解析

文中大多数内容来源github,版权属于原作者,1. 基础环境在windows上做示例,本地要安装了pythonpython的pip模块 安装 webuiapi编辑器 pyCharm 2024.2(c...

python图像处理入门-提取轮廓

提取图像中物体的轮廓,通常用在图像识别中,比如图像像素级分割,应用面比较广。import cv2 import numpy as np from skimage.measure import fi...