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(一)Python环境安装
Aug 20 Python
python中urllib模块用法实例详解
Nov 19 Python
Python MySQLdb Linux下安装笔记
May 09 Python
Python中pygame的mouse鼠标事件用法实例
Nov 11 Python
Python实时获取cmd的输出
Dec 13 Python
简单谈谈Python中的json与pickle
Jul 19 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
python游戏地图最短路径求解
Jan 16 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
python实现梯度下降和逻辑回归
Mar 24 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 Python
python调试工具Birdseye的使用教程
May 25 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记录日志的实现代码
2011/08/08 PHP
destoon各类调用汇总
2014/06/20 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP7 list() 函数修改
2021/03/09 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
Python实现简单的代理服务器
2015/07/25 Python
Python 求数组局部最大值的实例
2019/11/26 Python
python多维数组分位数的求取方式
2020/03/03 Python
化工机械应届生求职信
2013/11/04 职场文书
考试诚信承诺书
2014/05/23 职场文书
仲裁协议书
2014/09/26 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
培训督导岗位职责
2015/04/10 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
职工食堂管理制度
2015/08/06 职场文书
公司年会主持词范文!
2019/05/07 职场文书