新闻详情

新闻详情

首页 / 资讯中心 / 详情

Python批量重命名照片:基于Exif时间戳的自动化方案

发布时间:2026/9/14 10:32:29来源:尧图网络
Python批量重命名照片:基于Exif时间戳的自动化方案
1. 项目背景与需求分析每次整理手机或相机里的照片时最让人头疼的就是那些杂乱无章的文件名。DCIM123.jpg、IMG_4567.png...这些默认生成的名称完全无法反映照片内容。更麻烦的是当你需要按时间顺序查找某张特定照片时往往要在文件属性中反复查看拍摄日期。这个工具正是为了解决这个痛点而生——它能自动读取照片内嵌的Exif元数据中的拍摄时间信息然后批量将照片重命名为YYYY-MM-DD_HH-MM-SS等规范化的时间格式。想象一下你从旅行带回的2000张照片3秒钟就能全部变成2023-08-15_14-30-22.jpg这样一目了然的名字。2. 技术实现原理2.1 Exif数据解析照片文件中隐藏的ExifExchangeable image file format数据就像数字胶卷上的隐形水印。通过Python的Pillow库可以提取这些元信息from PIL import Image from PIL.ExifTags import TAGS def get_exif(filepath): img Image.open(filepath) exif_data {} if hasattr(img, _getexif): exif img._getexif() if exif: for tag_id, value in exif.items(): tag TAGS.get(tag_id, tag_id) exif_data[tag] value return exif_data关键的时间标签是DateTimeOriginal原始拍摄时间其格式通常为YYYY:MM:DD HH:MM:SS。需要注意的是不同设备可能使用不同的Exif标签存储时间信息有些设备可能使用DateTimeDigitized数字化时间或DateTime修改时间。2.2 文件名规范化处理时间格式转换需要考虑以下细节替换原始字符串中的冒号为横杠更符合文件名规范处理时区差异建议统一转换为UTC时间处理没有时间信息的照片可fallback到文件创建时间from datetime import datetime def format_exif_time(exif_time_str): try: dt datetime.strptime(exif_time_str, %Y:%m:%d %H:%M:%S) return dt.strftime(%Y-%m-%d_%H-%M-%S) except (ValueError, TypeError): return None3. 完整实现方案3.1 基础版本代码以下是核心功能的Python实现import os from PIL import Image from PIL.ExifTags import TAGS from datetime import datetime def batch_rename_by_exif(input_folder, output_folder): if not os.path.exists(output_folder): os.makedirs(output_folder) supported_formats (.jpg, .jpeg, .png, .tiff, .nef) for filename in os.listdir(input_folder): if filename.lower().endswith(supported_formats): filepath os.path.join(input_folder, filename) try: exif get_exif(filepath) time_str exif.get(DateTimeOriginal) or \ exif.get(DateTimeDigitized) or \ exif.get(DateTime) if time_str: new_name format_exif_time(time_str) if new_name: ext os.path.splitext(filename)[1].lower() new_filename f{new_name}{ext} os.rename( filepath, os.path.join(output_folder, new_filename) ) except Exception as e: print(fError processing {filename}: {str(e)}) # 使用示例 batch_rename_by_exif(~/Photos/Raw, ~/Photos/Sorted)3.2 高级功能扩展实际使用中你可能还需要这些功能冲突处理当多张照片同一秒拍摄时自动追加序号from collections import defaultdict name_counter defaultdict(int) # 在重命名逻辑中添加 while os.path.exists(new_path): name_counter[new_name] 1 new_filename f{new_name}_{name_counter[new_name]}{ext}自定义命名模板def generate_filename(template, dt, camera_modelNone): return template.replace({YYYY}, dt.strftime(%Y)) \ .replace({MM}, dt.strftime(%m)) \ .replace({DD}, dt.strftime(%d)) \ # ...其他占位符处理并行处理加速from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers4) as executor: executor.map(process_file, file_list)4. 常见问题与解决方案4.1 Exif数据缺失当照片没有Exif信息时可以按以下优先级回退文件系统创建时间os.path.getctime()文件修改时间os.path.getmtime()自定义默认时间或提示用户手动处理4.2 时区处理不同设备可能在不同时区拍摄照片建议import pytz def adjust_timezone(naive_dt, timezoneUTC): return naive_dt.replace(tzinfopytz.UTC).astimezone( pytz.timezone(timezone) )4.3 性能优化处理数万张照片时先扫描所有文件生成任务列表使用内存缓存已处理的文件名显示进度条如tqdm库5. 实际应用建议预处理检查先用小样本测试确认时间提取准确率备份原始文件建议先复制到新目录再重命名日志记录记录所有重命名操作以便回滚import logging logging.basicConfig(filenamerename.log, levellogging.INFO)对于摄影爱好者可以进一步扩展功能按拍摄设备分类Exif中的Make和Model字段按GPS地理位置创建文件夹结构与Lightroom等专业软件集成这个工具虽然原理简单但能节省大量整理照片的时间。我自己用它处理过3万多张家庭照片从混乱的IMG_xxx命名变成了完善的时间线档案找照片效率提升了至少10倍。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

SpringBoot集成OpenAPI实现自动化API文档管理 2026/9/14 11:11:35

SpringBoot集成OpenAPI实现自动化API文档管理

1. SpringBoot集成OpenAPI的背景与价值在现代Web应用开发中,API文档的维护一直是个痛点。传统的手写文档方式存在更新不及时、格式不统一等问题,而OpenAPI规范(原Swagger)通过代码自动生成文档的方式解决了这一难题。SpringBoot作…

阅读更多 →
[嵌入式方案][nrf51822][LSC-01] BLE模块 从机 AT指令 BLE HID NUS 密码配对 自动回连 电量显示 OTA DFU DTM 定频 4路PWM 2路ADC4路自定义IO 2026/9/14 11:11:35

[嵌入式方案][nrf51822][LSC-01] BLE模块 从机 AT指令 BLE HID NUS 密码配对 自动回连 电量显示 OTA DFU DTM 定频 4路PWM 2路ADC4路自定义IO

文章目录1. 模块概述1.1 核心特性1.2 外设资源1.3 应用方向2. 验证板说明2.1 指示灯(AVD_LED 蓝灯)2.2 功能键(KEY0)2.3 自定义按键(KEY1、KEY2)2.4 引脚说明3. 常见问题与排查3.1 连接失败3.2 串口无数据3…

阅读更多 →
IoT-For-Beginners 实战:将树莓派水果质检设备切换至 IoT Edge 图像分类器(Custom Vision SDK 到 REST API 改造指南) 2026/9/14 11:11:35

IoT-For-Beginners 实战:将树莓派水果质检设备切换至 IoT Edge 图像分类器(Custom Vision SDK 到 REST API 改造指南)

IoT-For-Beginners 实战:将树莓派水果质检设备切换至 IoT Edge 图像分类器(Custom Vision SDK 到 REST API 改造指南) 【免费下载链接】IoT-For-Beginners 12 Weeks, 24 Lessons, IoT for All! 项目地址: https://gitcode.com/GitHub_Trend…

阅读更多 →
Envoy 上游 HTTP/3 空指针崩溃深度解析:CVE-2026-48521 的故障链路、修复验证与 auto_config 配置指南 2026/9/14 11:11:35

Envoy 上游 HTTP/3 空指针崩溃深度解析:CVE-2026-48521 的故障链路、修复验证与 auto_config 配置指南

Envoy 上游 HTTP/3 空指针崩溃深度解析:CVE-2026-48521 的故障链路、修复验证与 auto_config 配置指南 【免费下载链接】envoy Cloud-native high-performance edge/middle/service proxy 项目地址: https://gitcode.com/GitHub_Trending/en/envoy 上游用 HT…

阅读更多 →
LifeOS DetectAI Detect 工作流:AI 写作痕迹的启发式审计与无密钥统计信号实践 2026/9/14 11:11:35

LifeOS DetectAI Detect 工作流:AI 写作痕迹的启发式审计与无密钥统计信号实践

LifeOS DetectAI Detect 工作流:AI 写作痕迹的启发式审计与无密钥统计信号实践 【免费下载链接】LifeOS ⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work. 项目…

阅读更多 →
如何关闭 TRL 的匿名使用统计收集(遥测)? 2026/9/14 11:08:34

如何关闭 TRL 的匿名使用统计收集(遥测)?

如何关闭 TRL 的匿名使用统计收集(遥测)? 【免费下载链接】trl Train transformer language models with reinforcement learning. 项目地址: https://gitcode.com/GitHub_Trending/tr/trl 如果你在用 TRL 做强化学习训练,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞