一、背景介紹
現在人們拍攝的照片數量越來越多,而且經常散布在不同的文件夾或設備中,讓人們在尋找相片的時候非常的困難。那麼有沒有一種方法可以使這些相片自動按時間順序整理到一個文件夾中呢?答案是有的,我們可以使用Python腳本實現這個功能。
二、方案設計
我們的整理方案是按照照片的拍攝時間來對照片進行整理。具體的流程是:首先從照片的exif信息中讀取照片的拍攝日期和時間,然後根據具體的需求,將照片按照年、月或日進行分組,最後將照片移動到以分組為名的文件夾中。這個方案需要涉及到Python的os、time和exifread模塊。
三、關鍵代碼
import os import shutil import time import exifread # 時間格式化字符串,分別代表年、月、日 time_formats = ['%Y', '%m', '%Y%m%d'] def get_img_taken_time(img_path): """從照片中獲取拍攝時間""" f = open(img_path, 'rb') tags = exifread.process_file(f) for k in tags.keys(): if k in ('Image DateTime', 'EXIF DateTimeOriginal', 'EXIF DateTimeDigitized'): taken_time = str(tags[k]).replace(':', '').replace(' ', '-') return taken_time return None def move_img_to_folder(img_path, folder_path): """將照片移動到指定的文件夾""" if not os.path.isdir(folder_path): os.makedirs(folder_path) shutil.move(img_path, folder_path) def organize_img_by_time(src_folder, dest_folder, time_format): """按照拍攝時間整理照片""" for root, dirs, files in os.walk(src_folder): for f in files: img_path = os.path.join(root, f) taken_time = get_img_taken_time(img_path) if taken_time: folder_name = time.strftime(time_format, time.strptime(taken_time, '%Y-%m-%d %H:%M:%S')) folder_path = os.path.join(dest_folder, folder_name) move_img_to_folder(img_path, folder_path)
四、實現步驟
下面具體介紹一下實現該功能的步驟:
1、獲取照片的拍攝時間
通過exifread模塊,我們可以非常方便地獲取照片的拍攝時間。
def get_img_taken_time(img_path): """從照片中獲取拍攝時間""" f = open(img_path, 'rb') tags = exifread.process_file(f) for k in tags.keys(): if k in ('Image DateTime', 'EXIF DateTimeOriginal', 'EXIF DateTimeDigitized'): taken_time = str(tags[k]).replace(':', '').replace(' ', '-') return taken_time return None
2、按照時間格式化字符串生成相應的文件夾名稱
根據不同的需求,我們可以選擇不同的時間格式化字符串,比如我們在此選擇的是年、月、日。根據時間格式化字符串生成相應的文件夾名稱。
folder_name = time.strftime(time_format, time.strptime(taken_time, '%Y-%m-%d %H:%M:%S'))
3、將照片移動到指定的文件夾
創建文件夾後,我們需要將該照片移動到相應的文件夾中,這裡使用shutil模塊的move方法實現。
def move_img_to_folder(img_path, folder_path): """將照片移動到指定的文件夾""" if not os.path.isdir(folder_path): os.makedirs(folder_path) shutil.move(img_path, folder_path)
4、按照時間對照片進行整理
最後,我們可以根據指定的時間格式化字符串,將照片按照年、月或日進行分組,然後將其放到相應的文件夾中。
def organize_img_by_time(src_folder, dest_folder, time_format): """按照拍攝時間整理照片""" for root, dirs, files in os.walk(src_folder): for f in files: img_path = os.path.join(root, f) taken_time = get_img_taken_time(img_path) if taken_time: folder_name = time.strftime(time_format, time.strptime(taken_time, '%Y-%m-%d %H:%M:%S')) folder_path = os.path.join(dest_folder, folder_name) move_img_to_folder(img_path, folder_path)
五、總結
通過Python實現照片自動整理功能,不僅可以方便地管理大量的照片,而且還可以幫助我們快速找到我們所需要的照片。在實現該功能的過程中,除了以上介紹的幾個關鍵步驟外,還需要注意一些文件操作中的邊緣情況,比如判斷指定文件夾是否存在,處理重名文件等問題。希望這篇文章能夠對大家有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/244878.html