0

0

怎样用Python自动分类整理照片?EXIF信息读取与分类

雪夜

雪夜

发布时间:2025-07-02 17:46:06

|

839人浏览过

|

来源于php中文网

原创

python自动分类整理照片的核心是读取exif信息并根据其内容创建文件夹移动文件。1. 安装pillow库用于图像处理;2. 编写脚本读取照片的exif数据,提取拍摄日期并按年月创建文件夹进行分类;3. 对于无exif信息的照片,可使用文件修改时间、手动分类或结合图像识别技术处理,并建立“未分类”文件夹统一管理;4. 可扩展至根据相机型号分类,提取exif中的型号信息创建对应目录;5. 利用gps信息按地理位置分类,借助exifread库读取经纬度并通过地理编码服务转换为地点名称;6. 优化效率方面,可采用多进程处理、批量操作、使用更快的图像库、避免重复读取以及使用ssd提升io速度。

怎样用Python自动分类整理照片?EXIF信息读取与分类

想要用Python自动分类整理照片?核心就在于读取照片的EXIF信息,然后根据这些信息(比如拍摄日期、相机型号等)来创建文件夹并移动照片。

怎样用Python自动分类整理照片?EXIF信息读取与分类

解决方案:

怎样用Python自动分类整理照片?EXIF信息读取与分类

首先,你需要安装一个叫做Pillow的Python库,它可以用来处理图像,包括读取EXIF信息。使用pip install Pillow安装。

立即学习Python免费学习笔记(深入)”;

接下来,就是编写Python脚本了。这是一个基本的例子:

怎样用Python自动分类整理照片?EXIF信息读取与分类
from PIL import Image
import os
import shutil

def organize_photos(source_dir, dest_dir):
    for filename in os.listdir(source_dir):
        if filename.endswith(('.jpg', '.jpeg', '.png', '.gif')): # 检查文件类型
            filepath = os.path.join(source_dir, filename)
            try:
                img = Image.open(filepath)
                exif_data = img._getexif()
                if exif_data:
                    # 提取拍摄日期,这里假设EXIF标签269对应日期时间
                    date_taken = exif_data.get(36867) or exif_data.get(306) # 36867是DateTimeOriginal,306是DateTime
                    if date_taken:
                        year_month = date_taken[:7].replace(":", "-")  # 提取年月
                        target_dir = os.path.join(dest_dir, year_month)
                        os.makedirs(target_dir, exist_ok=True)
                        shutil.move(filepath, os.path.join(target_dir, filename))
                        print(f"Moved {filename} to {target_dir}")
                    else:
                        print(f"No date information found for {filename}")
                else:
                    print(f"No EXIF data found for {filename}")
            except Exception as e:
                print(f"Error processing {filename}: {e}")

# 使用示例
source_directory = "/path/to/your/photos" # 替换为你的照片源目录
destination_directory = "/path/to/your/organized/photos" # 替换为你的目标目录
organize_photos(source_directory, destination_directory)

这段代码会遍历指定目录下的所有图片,读取它们的EXIF信息,提取拍摄日期,然后根据年月创建文件夹,并将照片移动到对应的文件夹中。注意,EXIF信息的标签ID可能会因为相机型号而有所不同,你需要根据实际情况调整。

如何处理没有EXIF信息的照片?

有些照片可能没有EXIF信息,或者EXIF信息不完整。针对这种情况,你可以考虑以下几种方法:

  1. 使用文件修改日期: 如果EXIF信息缺失,可以退而求其次,使用文件的修改日期作为分类的依据。os.path.getmtime()函数可以获取文件的修改时间戳,然后将其转换为日期格式。

    import time
    file_modified_time = os.path.getmtime(filepath)
    date_taken = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(file_modified_time))
  2. 手动分类: 对于少量无法自动分类的照片,手动创建文件夹并移动它们可能是最直接的办法。

  3. 结合图像识别技术: 如果照片内容有明显特征(比如风景、人像),可以尝试使用图像识别技术来辅助分类。但这需要更复杂的算法和模型,例如使用OpenCV或者TensorFlow。

  4. 建立一个“未分类”文件夹: 将所有无法确定分类的照片都放到一个“未分类”文件夹中,稍后再手动处理。

    Imagine By Magic Studio
    Imagine By Magic Studio

    AI图片生成器,用文字制作图片

    下载

如何根据相机型号或地理位置信息分类照片?

除了日期,你还可以根据相机型号或地理位置信息来分类照片。

  1. 根据相机型号分类: EXIF信息中通常包含相机型号的信息。你可以提取该信息,并根据相机型号创建文件夹。

    camera_model = exif_data.get(272) # 272是Make,271是EquipmentMake,272是Model
    if camera_model:
        target_dir = os.path.join(dest_dir, str(camera_model))
        os.makedirs(target_dir, exist_ok=True)
        shutil.move(filepath, os.path.join(target_dir, filename))
  2. 根据地理位置信息分类: 有些照片包含GPS信息。你可以使用第三方库(比如exifread)来读取这些信息,然后根据经纬度确定照片的拍摄地点,并根据地点创建文件夹。需要注意的是,处理GPS信息会稍微复杂一些,因为你需要将经纬度转换为可读的地点名称。可以使用地理编码服务,如Google Maps API,但可能需要付费。

    import exifread
    
    with open(filepath, 'rb') as f:
        tags = exifread.process_file(f)
        latitude = tags.get('GPS GPSLatitude')
        longitude = tags.get('GPS GPSLongitude')
    
        if latitude and longitude:
            # 这里需要将经纬度转换为地点名称,可以使用地理编码服务
            location = get_location_from_coordinates(latitude, longitude)
            target_dir = os.path.join(dest_dir, location)
            os.makedirs(target_dir, exist_ok=True)
            shutil.move(filepath, os.path.join(target_dir, filename))

如何优化照片分类的效率?

如果你的照片数量非常庞大,那么分类过程可能会很慢。以下是一些优化效率的建议:

  1. 使用多线程或多进程: Python的threadingmultiprocessing模块可以让你并行处理多个照片,从而提高分类速度。但是要注意,多线程可能会受到全局解释器锁(GIL)的限制,对于CPU密集型任务,多进程可能更适合。

  2. 批量处理: 不要一次处理一张照片,而是将照片分成批次,然后批量读取EXIF信息和移动文件。

  3. 使用更快的图像处理库: 虽然Pillow很常用,但可能不是最快的图像处理库。你可以尝试其他的库,比如opencv-python,看看是否能提高速度。

  4. 避免重复操作: 比如,如果已经读取了某个照片的EXIF信息,就不要再次读取。可以将EXIF信息缓存起来,下次直接使用。

  5. 使用固态硬盘(SSD): 如果你的照片存储在机械硬盘上,那么读取和写入速度可能会成为瓶颈。使用SSD可以显著提高速度。

总的来说,照片自动分类是一个很有趣的项目,它结合了文件操作、图像处理和数据分析。通过不断尝试和优化,你可以打造一个高效且智能的照片管理系统。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

373

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

436

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

803

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

371

2025.07.23

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

765

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

377

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

32

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

29

2026.01.21

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号