首先我们可以先了解一下所需的模块和方法。
- exifread模块
可以使用exifread模块来解析图片的EXIF信息。
- datetime模块
可以使用datetime模块将EXIF信息中的时间转化为datetime对象,以便进行比较和排序。
具体步骤如下:
- 导入所需模块:
import exifread
from datetime import datetime
import os
- 编写函数来解析EXIF信息,获取拍摄时间:
def get_image_taken_time(file_path):
with open(file_path, 'rb') as f:
tags = exifread.process_file(f)
if 'EXIF DateTimeOriginal' in tags:
taken_time = tags['EXIF DateTimeOriginal'].values
taken_time = datetime.strptime(taken_time, '%Y:%m:%d %H:%M:%S')
return taken_time
else:
return None
该函数接受一个文件路径作为参数,并返回图片的拍摄时间,如果无法获取到拍摄时间则返回None。
- 遍历文件夹中的所有图片文件,并按照拍摄时间进行分类:
dir_path = 'path/to/image/directory'
image_files = [os.path.join(dir_path, file) for file in os.listdir(dir_path) if file.lower().endswith(('.jpg', '.jpeg', '.png', '.gif'))]
image_files.sort(key=lambda file: get_image_taken_time(file))
for file in image_files:
taken_time = get_image_taken_time(file)
if taken_time:
year = taken_time.strftime('%Y')
month = taken_time.strftime('%Y-%m')
day = taken_time.strftime('%Y-%m-%d')
year_dir = os.path.join(dir_path, year)
month_dir = os.path.join(year_dir, month)
day_dir = os.path.join(month_dir, day)
if not os.path.exists(year_dir):
os.mkdir(year_dir)
if not os.path.exists(month_dir):
os.mkdir(month_dir)
if not os.path.exists(day_dir):
os.mkdir(day_dir)
new_file_path = os.path.join(day_dir, os.path.basename(file))
os.rename(file, new_file_path)
该代码会将指定文件夹中的所有图片文件按照拍摄时间进行排序,并将它们分类保存到年月日文件夹中。
例如,以下是一个图片文件夹中的示例文件:
/Photos
/IMG_001.jpg
/IMG_002.jpg
/IMG_003.jpg
经过上述代码处理后,文件夹的结构将变为:
/Photos
/2022
/2022-01
/2022-01-01
/IMG_001.jpg
/2022-01-02
/IMG_002.jpg
/2022-02
/2022-02-01
/IMG_003.jpg
由于示例文件中的拍摄时间分别为2022年1月1日、2022年1月2日和2022年2月1日,因此它们被保存到了对应的年月日文件夹中。
以上就是整个Python解析照片拍摄时间进行图片整理的完整攻略,接下来是两条示例说明:
示例一:
假设存在以下文件:
/Photos
/IMG_001.jpg
/IMG_002.jpg
/IMG_003.jpg
其中,IMG_001.jpg的拍摄时间为2022年5月1日,IMG_002.jpg的拍摄时间为2022年5月2日,IMG_003.jpg的拍摄时间为2022年5月3日。
如果运行以上代码,将会得到以下文件夹结构:
/Photos
/2022
/2022-05
/2022-05-01
/IMG_001.jpg
/2022-05-02
/IMG_002.jpg
/2022-05-03
/IMG_003.jpg
因此,所有图片文件将会按照拍摄时间被整理分到对应的年月日文件夹中。
示例二:
假设存在以下文件:
/Photos
/IMG_001.jpg
/IMG_002.jpg
/IMG_003.jpg
其中,IMG_001.jpg没有拍摄时间,IMG_002.jpg的拍摄时间为2022年5月2日,IMG_003.jpg的拍摄时间为2022年5月1日。
如果运行以上代码,将会得到以下文件夹结构:
/Photos
/2022
/2022-05
/2022-05-01
/IMG_003.jpg
/2022-05-02
/IMG_002.jpg
由于IMG_001.jpg无法获取拍摄时间,因此它未能被整理到相应的文件夹中,而且文件的顺序将会按照拍摄时间来排序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python解析照片拍摄时间进行图片整理 - Python技术站