各位小伙伴们,别看这些张张图片,它们也是有生日的哦!而今天,我们就要教你一招,让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教程,都欢迎随时提问哦!加油!📸