python让图片按照exif信息里的创建时间进行排序的方法


Posted in Python onMarch 16, 2015

本文实例讲述了python让图片按照exif信息里的创建时间进行排序的方法。分享给大家供大家参考。具体分析如下:

我们经常会从不同的设备里取出照片,比如照相机,手机,iphone等等,操作系统记录的创建日期经常 会因为拷贝等原因变动,下面的代码可以给图片按照exif里的创建时间进行排序,非常有用。

import os

import shutil

import Image

from PIL.ExifTags import TAGS

def print_all_known_exif_tags():

    for k in sorted(TAGS):

        print k, TAGS[k]

def print_all_exif_tags(image):

    try:

        img = Image.open(image)

    except Exception, e:

        print image, "skipping due to", e

    else:

        xf = img._getexif()

        for tag in xf:

            print TAGS.get(tag), xf[tag]

    finally:

        print 'done'

def get_minimum_creation_time(exif_data):

    mtime = "?"

    if 306 in exif_data and exif_data[306] < mtime: # 306 = DateTime

        mtime = exif_data[306]

    if 36867 in exif_data and exif_data[36867] < mtime: # 36867 = DateTimeOriginal

        mtime = exif_data[36867]

    if 36868 in exif_data and exif_data[36868] < mtime: # 36868 = DateTimeDigitized

        mtime = exif_data[36868]

    return mtime

def get_creationdate_with_filename_as_dict(list_of_folders):

    print "Processing all image files in:"

    result = {}

    for folder in list_of_folders:

        print "- " + folder

        counter = 0

        for f in os.listdir(folder):

            counter += 1

            fullFileName = folder + "\\" + f

            try:

                img = Image.open(fullFileName)

            except Exception, e:

                print "    Skipping '%s' due to exception: %s"%(f, e)

                continue

            mtime = get_minimum_creation_time(img._getexif())

            i = 0

            while mtime+"_"*i in result:

                i += 1

            mtime = mtime+"_"*i

            result[mtime] = fullFileName

        print "  Found %s orignal files in %s."%(counter, folder)

    print "Added total of %s to dictionary."%len(result)

    return result

def copy_from_image_dict_to_directory(image_dict, output_dir):

    assert os.path.exists(output_dir)

    for i,key in enumerate(sorted(image_dict)):

        dummy, extension =  os.path.splitext(image_dict[key])

        new_file_name = key.replace(":", "-") + extension

        output_file = output_dir + new_file_name

        shutil.copy2(image_dict[key], output_file)

    print "Copied %s files to %s"%(i+1, output_dir)

if __name__=="__main__":

    source_dir = "/var/tmp/images"

    output_dir = "/var/tmp/output"

    # obtain /var/tmp/images/iPhone, /var/tmp/images/CanonPowerShot, /var/tmp/images/Nikon1

    list_of_folders = [source_dir + subfolder for subfolder in os.listdir(source_dir)]

    all_files = get_creationdate_with_filename_as_dict(list_of_folders)

    copy_from_image_dict_to_directory(all_files, output_dir)

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
在PyCharm下打包*.py程序成.exe的方法
Nov 29 Python
Python编程深度学习绘图库之matplotlib
Dec 28 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
keras用auc做metrics以及早停实例
Jul 02 Python
Python 实现将某一列设置为str类型
Jul 14 Python
Python unittest生成测试报告过程解析
Sep 08 Python
python用tkinter实现一个简易能进行随机点名的界面
Sep 27 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
python实现简单的计时器功能函数
Mar 14 #Python
python将图片文件转换成base64编码的方法
Mar 14 #Python
python在Windows8下获取本机ip地址的方法
Mar 14 #Python
python检测远程端口是否打开的方法
Mar 14 #Python
python检测远程udp端口是否打开的方法
Mar 14 #Python
python检测远程服务器tcp端口的方法
Mar 14 #Python
python循环监控远程端口的方法
Mar 14 #Python
You might like
PHP安装问题
2006/10/09 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
react redux入门示例
2018/04/19 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
Python列表(List)知识点总结
2019/02/18 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
Python高并发和多线程有什么关系
2020/11/14 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
新学期红领巾广播稿
2014/01/14 职场文书
服务行业口号
2014/06/11 职场文书
2014年国庆标语
2014/06/30 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
实习计划书范文
2015/01/16 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL