使用Python实现照片按照日期自动分类的操作指南

 更新时间:2025年08月17日 10:35:37   作者:码无止尽  
最近准备把近几年手机里面存储的照片按年份分类存储到硬盘里面,不知不觉累积了4000多张照片,人工一张张分类实在是太费时间、也容易出错,所以本文给大家介绍了使用Python实现照片按照日期自动分类的操作指南,需要的朋友可以参考下

各位小伙伴们,别看这些张张图片,它们也是有生日的哦!而今天,我们就要教你一招,让Python帮助图片自动按照日期分类,让这些镜头下的瞬间肆意自由,分门别类、慢慢成长!

准备工作

首先,需要携带一颗善良而充满创意的心,以及一颗热爱技术的脑袋。另外,Python的os模块、PIL库(Python Imaging Library)、以及exifread库也会是我们这次冒险的得力工具!

没有安装PIL和exifread库的,记得先安装一下哦:

pip install exifread
pip install Pillow

代码实现

from PIL import Image
import os
import exifread
from datetime import datetime
 
def get_image_date_taken(image_path):
    with open(image_path, 'rb') as image_file:
        tags = exifread.process_file(image_file)
        date_taken = tags.get('EXIF DateTimeOriginal')
        if date_taken:
            return datetime.strptime(str(date_taken), '%Y:%m:%d %H:%M:%S')
        else:
            return None
 
def classify_images_by_date(input_folder, output_folder):
    os.makedirs(output_folder, exist_ok=True)
    for filename in os.listdir(input_folder):
        input_path = os.path.join(input_folder, filename)
        if os.path.isfile(input_path):
            date_taken = get_image_date_taken(input_path)
            if date_taken:
                date_folder = date_taken.strftime('%Y-%m-%d')
                date_folder_path = os.path.join(output_folder, date_folder)
                os.makedirs(date_folder_path, exist_ok=True)
                output_path = os.path.join(date_folder_path, filename)
                os.replace(input_path, output_path)
# 测试
classify_images_by_date(
    'C:/Users/olive/Desktop/待分类的图片',
    'C:/Users/olive/Desktop/分类后的图片')

代码解析

这段代码不仅涉及到PIL库的应用、文件处理,更使用了exifread库来获取图片的拍摄日期信息。Python就好像是一位时间旅行者,为图片镌刻上属于它们自己的生日!

现在让我来详细解析一下:

1.首先,定义了一个名为get_image_date_taken的函数,用于获取图片的拍摄日期。它通过读取图片的exif信息(EXIF是存储在数码照片文件中的附加信息,包括拍摄日期等),获取图片的拍摄日期,并返回一个datetime对象。

2.然后,定义了一个名为classify_images_by_date的函数,用于分类图片并保存到对应日期的文件夹中。该函数接收两个参数:input_folder表示输入图片存放的文件夹路径,output_folder表示分类后图片保存的文件夹路径。

3.在classify_images_by_date函数中,首先使用os.makedirs(output_folder,exist_ok=True)创建输出文件夹,如果文件夹已存在则不会报错。

4.然后,遍历输入文件夹中的每张图片。对于每张图片,获取图片的完整路径input_path,并进行判断是否为文件。

5.如果是文件,则调用get_image_date_taken函数获取图片的拍摄日期date_taken。如果成功获取到日期,就根据日期创建对应的文件夹,并将图片移动到该文件夹中。

6.最后,利用os.replace方法将图片从原路径移动到新的分类路径,并完成分类操作。

激动人心的测试

跟着小编的脚步,将你的图片带入时间的长河吧!只需要将输入文件夹路径和输出文件夹路径传入classify_images_by_date函数,Python就能为你将图片按照日期自动分类,慢慢成长。

接下来,我们要开始测试代码了,首先,我们准备一些图片,放在一个文件夹下:

我们会发现,前面3张不是我们自己拍的照片(滥竽充数的,看看能不能蒙混过关😄),后面的照片,文件名也是有点乱,甚至有些都看不出是什么时候拍的。

这里再多啰嗦两句,我们深究一下图片的日期究竟是被记录在了哪里:

我们随便选择一张照片,对它右击,选择属性,就跳出了如下所示的一个弹框。然后,我们点详细信息这个选项卡,然后在属性中,找到来源下的拍摄日期,它的值,就是我们实际拍摄照片的时间。

我们再看一下,不是我们自己拍摄的照片,有没有日期呢:

我们看到,这张图片的拍摄日期是空白的。

好了,接下来要执行我们的代码了,激动人心的时刻终于来了。

首先,还是要改一下测试的那行代码,再上面的代码中的最后一行:

# 测试
classify_images_by_date(
    'C:/Users/olive/Desktop/待分类的图片',
    'C:/Users/olive/Desktop/分类后的图片')

注意,两个文件夹的路径要改成你自己的哦!

好了,接下来就运行一下吧。

很快,几乎没有等待,瞬间完成!

我们看到,此时在我们的桌面上就多了一个【分类后的图片】的文件夹:

非常棒,果然出现了按日期归类的文件夹,我们点开看一下,照片是不是归类进来了:

ok,归类成功!

最后,我们再看下【待分类的图片】的那个文件夹:

果然,不是我们拍的照片,呆在原地了,在我们机智的Python面前,所有的妖精无处遁形,哈哈!

结语

这篇文章让我们一起见证了图片的成长,让这些瞬间在时间的长河里慢慢自由生长、分门别类。希望这个教程能为你的图片分类之旅增添一丝乐趣和意义!

在未来的某一天,你回过头来,会发现这些个个镜头下的瞬间,其实也在悄悄地留下了生日。

到此这篇关于使用Python实现照片按照日期自动分类的操作指南的文章就介绍到这了,更多相关Python照片按日期自动分类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 初学python的操作难点总结(新手必看篇)

    初学python的操作难点总结(新手必看篇)

    下面小编就为大家带来一篇初学python的操作难点总结(新手必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 解决Pycharm中import时无法识别自己写的程序方法

    解决Pycharm中import时无法识别自己写的程序方法

    今天小编就为大家分享一篇解决Pycharm中import时无法识别自己写的程序方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 利用Python和C++解析gltf文件的示例详解

    利用Python和C++解析gltf文件的示例详解

    gltf,全称是GL Transmission Format,是一种开放的3D文件格式,Python和C++是两个非常强大的工具,下面我们就来看看如何结合这两种语言来实现gltf文件的解析吧
    2025-03-03
  • 39条Python语句实现数字华容道

    39条Python语句实现数字华容道

    这篇文章主要为大家详细介绍了39条Python语句实现数字华容道,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • Python实现去除图片中指定颜色的像素功能示例

    Python实现去除图片中指定颜色的像素功能示例

    这篇文章主要介绍了Python实现去除图片中指定颜色的像素功能,结合具体实例形式分析了Python基于pil与cv2模块的图形载入、运算、转换等相关操作技巧,需要的朋友可以参考下
    2019-04-04
  • flask-socketio实现WebSocket的方法

    flask-socketio实现WebSocket的方法

    这篇文章主要介绍了flask-socketio实现WebSocket的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Python简单遍历字典及删除元素的方法

    Python简单遍历字典及删除元素的方法

    这篇文章主要介绍了Python简单遍历字典及删除元素的方法,结合实例形式分析了Python遍历字典删除元素的操作方法与相关注意事项,需要的朋友可以参考下
    2016-09-09
  • 如何解决Python读取图片路径存在转义字符的问题

    如何解决Python读取图片路径存在转义字符的问题

    这篇文章主要为大家详细介绍了如何解决Python读取图片路径时存在转义字符的问题,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2023-07-07
  • Python PyQt5实现拖放效果的原理详解

    Python PyQt5实现拖放效果的原理详解

    这篇文章主要为大家详细介绍了Python PyQt5中拖放效果的实现原理与实现代码,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-11-11
  • 基于django micro搭建网站实现加水印功能

    基于django micro搭建网站实现加水印功能

    这篇文章主要介绍了基于django micro搭建网站实现加水印功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论