#!/usr/bin/env python
# -*- coding: utf-8 -*-'''
批量修改照片文件名称的Python脚本程序。
遍历指定目录(含子目录)的照片文件,根据拍照时间将照片文件名修改为以下格式:
20140315_091230.jpg (%Y%m%d_%H%M%S)由于文件名已经精确到秒,理论上重名的概率非常小。
如果需要考虑到重名的问题,可以对本程序进行进一步的优化。!该程序需要安装exifread模块,否则无法使用。
例如,Linux/Mac OS X下命令行安装该模块:sudo pip install exifread
'''import os
import stat
import time
import exifread
MY_DATE_FORMAT = '%Y%m%d_%H%M%S'SUFFIX_FILTER = [ '.jpg' , '.png' , '.mpg' , '.mp4' , '.thm' , '.bmp' , '.jpeg' , '.avi' , '.mov' ]
DELETE_FILES = [ 'thumbs.db' , 'sample.dat' ]def isFormatedFileName ( filename ) :#判断是否已经是格式化过的文件名try :filename_nopath = os.path . basename ( filename )f , e = os.path . splitext ( filename_nopath )time . strptime ( f , MY_DATE_FORMAT )return Trueexcept ValueError :return Falsedef isTargetedFileType ( filename ) :#根据文件扩展名,判断是否是需要处理的文件类型filename_nopath = os.path . basename ( filename )f , e = os.path . splitext ( filename_nopath )if e . lower ( ) in SUFFIX_FILTER :return Trueelse :return Falsedef isDeleteFile ( filename ) :#判断是否是指定要删除的文件filename_nopath = os.path . basename ( filename )if filename_nopath . lower ( ) in DELETE_FILES :return Trueelse :return Falsedef generateNewFileName ( filename ) :#根据照片的拍照时间生成新的文件名(如果获取不到拍照时间,则使用文件的创建时间)try :if os.path . isfile ( filename ) :fd = open ( filename , 'rb' )else :raise "[%s] is not a file!\n" % filenameexcept :raise "unopen file[%s]\n" % filenamedata = exifread . process_file ( fd )if data :#取得照片的拍摄日期try :t = data [ 'EXIF DateTimeOriginal' ]#转换成 yyyymmdd_hhmmss的格式dateStr = str ( t ) . replace ( ":" , "" ) [ : 10 ] + "_" + str ( t ) [ 11 : ] . replace ( ":" , "" )except :pass#如果没有取得exif信息,则用图像文件的创建日期作为拍摄日期state = os . stat ( filename )dateStr = time . strftime ( MY_DATE_FORMAT , time . localtime ( state [ - 2 ] ) )dirname = os.path . dirname ( filename )filename_nopath = os.path . basename ( filename )f , e = os.path . splitext ( filename_nopath )newFileName = os.path . join ( dirname , dateStr + e ) . lower ( )return newFileNamedef scandir ( startdir ) :#遍历指定目录以及子目录,对满足条件的文件进行改名或删除处理
     os . chdir ( startdir )for obj in os . listdir ( os . curdir ) :if os.path . isfile ( obj ) :if isTargetedFileType ( obj ) and isFormatedFileName ( obj ) == False :#对满足过滤条件的文件进行改名处理newFileName = generateNewFileName ( obj )print "rename [%s] => [%s]" % ( obj , newFileName )os . rename ( obj , newFileName )elif isDeleteFile ( obj ) :#删除制定的文件print "delete [%s]: " % objos . remove ( obj )else :passif os.path . isdir ( obj ) :scandir ( obj )os . chdir ( os . pardir )if __name__ == "__main__" :path = "/Users/abc/www/img"scandir ( path )

转载于:https://www.cnblogs.com/rxbook/p/7509530.html

[经典] 使用Python批量重命名iPhone拍摄的照片-按照拍摄时间重命名相关推荐

  1. Python批量重命名iPhone、微信照片,视频-按照拍摄时间重命名

    平时用iphone手机,也用微信,经常从微信保存一些照片,视频到手机里.时间长了照片比较多,分不清是哪天拍摄的,或者保存的,所以平时我喜欢用时间命名照片,视频. 最近和我女朋友分手了,在一起的一些合照 ...

  2. python批量重命名指定目录下所有文件的后缀名

    python批量重命名指定目录下所有文件的后缀名 有个需求,需要把某个文件夹下所有后缀名为.abc的更改为.xyz; #批量重命名指定目录下面所有文件的后缀名. word_dir为需要更改后缀的文件夹 ...

  3. python下载文件并改名_第46p,8行代码,用Python批量重命名文件

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第46篇文章,第二阶段的课程:Python基础知识:小案例之用Python批量重命名文件. 学习本课程,建议先看一遍:[计算机基础知 ...

  4. 使用python批量给图片重命名

    简单的python程序,可以对图片以数字的顺序,进行批量的重命名 代码如下: #批量修改文件名,默认操作为将图片按1,2,3,,,顺序重命名import ospath_in = "./iu& ...

  5. Python批量重命名文件

    Python批量重命名文件 修改出处 有积分的小伙伴支持一下下载链接 对图片文件名重命名时看到了很有用的代码,针对本人重命名需要,做出如下修改: n=count + int(startNumber) ...

  6. Python批量重命名图片

    Python批量重命名图片 # -*- coding:utf8 -*-import osclass BatchRename():'''批量重命名文件夹中的图片文件'''def __init__(sel ...

  7. python批量改名微信视频软件,python利用文件时间批量重命名照片和视频

    本文实例为大家分享了python利用文件时间批量重命名照片和视频的具体代码,供大家参考,具体内容如下 问题描述 承接上节的问题,在安卓和苹果间互导照片和视频还容易出现文件名混乱的问题,如下图所示. 代 ...

  8. Python批量重命名考研资料

    Python批量重命名文件 零.问题引入 最近网上找了一些高等数学基础课程,当然免费的肯定少不了广告,我下载的就是下面这个样子 简直不能忍受,所以现在开始来重命名这些文件,可是现在下载了60多集,一个 ...

  9. 天天向上续 python代码_第46p,8行代码,用Python批量重命名文件

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第46篇文章,第二阶段的课程:Python基础知识:小案例之用Python批量重命名文件. 学习本课程,建议先看一遍:[计算机基础知 ...

最新文章

  1. 返回指针值的函数(1)
  2. iOS核心动画高级技术(十四) 图像IO
  3. 何时使用Delegate,何时使用Interface
  4. C#通过COM组件操作IE浏览器(二):使用IHTMLDocument3完成登录
  5. PHP和Mysql处理IP地址
  6. How to use fb.data.query to get friends info?
  7. 用js实现鼠标点击爱心特效
  8. jquery-weui滚动加载问题解决
  9. 四大领域全面发力,腾讯云构筑全链路开发者服务体系
  10. SpringMVC 异常的处理
  11. 【车道线检测与寻迹】2月17日 车道线检测carry边缘检测+Hough哈夫变换法
  12. CCleaner v5.83.9050版,免费的系统优化和隐私保护工具
  13. 计算机组成原理(第3版)唐朔飞著 知识点总结
  14. 信息系统项目管理重点:供应链管理(SCM)
  15. 您的CPU支持该TensorFlow二进制文件未编译为使用的指令:AVX AVX2
  16. wps右下角弹窗广告(WPS购物或叫WPS热点)彻底关闭
  17. 自然语言处理3 -- 词性标注
  18. Spring boot 集成 WebService(简单使用、文件上传下载)
  19. IOS微信端touchstart事件失效处理
  20. MySql重装出错, Staring the server出错,日志3306 with user root with no password...

热门文章

  1. abstract 的基本概念和用法
  2. android 输入法确定键,android 改变输入法enter键文字 为搜索 下一个 以及前往
  3. 夏津一中2021高考成绩查询,2021德州市地区高考成绩排名查询,德州市高考各高中成绩喜报榜单...
  4. 【毕业设计】后端实现——各个支付平台保存的账单分析与导入合并
  5. varnish2.04配置
  6. mui从iframe页面跳转到应用根目录页面
  7. 包含重复元素的全排列
  8. linux 5.5安装万兆网卡驱动,CentOS下安装网卡驱动
  9. 2021年中国内地城市地铁客流量排行榜:北上广深日均客运量超500万人次,深圳客流强度最大(附年榜TOP43详单)
  10. 自相矛盾:一个进程可以自成死锁么?