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标准日志模块logging的使用方法
Nov 01 Python
使用Python操作Elasticsearch数据索引的教程
Apr 08 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
python如何让类支持比较运算
Mar 20 Python
python 实时得到cpu和内存的使用情况方法
Jun 11 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
java判断三位数的实例讲解
Jun 10 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
python 字符串常用方法汇总详解
Sep 16 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
python列表推导式操作解析
Nov 26 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
E路文章系统PHP
2006/12/11 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
vue二级路由设置方法
2018/02/09 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
百思买美国官网:Best Buy
2016/07/28 全球购物
梅西百货澳大利亚:Macy’s Australia
2017/07/26 全球购物
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
土木工程毕业生自荐信
2013/11/12 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
监考失职检讨书
2015/01/26 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android