#!/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. Leetcode 769. Max Chunks To Make Sorted
  2. 2、Ktor学习-自动重新加载;
  3. QT之error: cannot bind non-const lvalue reference of type ‘CBaowen’ to an rvalue of type ‘CBaowen
  4. 视觉slam重点知识笔记
  5. php聊天室技术,PHP聊天室技术
  6. linux下eclipse进行ndk调试,超简单,写的超清晰
  7. Swashbuckle Swagger组件扩展
  8. Kaggle实战之leaf classification(树叶分类)
  9. 6.3.1 强连通分支算法--Kosaraju算法、Tarjan算法和Gabow算法
  10. 电脑装服务器系统没有网卡驱动,安装win10系统后没有网卡驱动的解决方法
  11. m7405d粉盒清零方法_联想打印机多功能一体机硒鼓清零方法汇总
  12. 手机app测试流程和要点
  13. C++编程 杨辉三角
  14. 访问yy直播页面点击播放无响应分析
  15. java qq聊天界面_用Java制作一个简单的QQ聊天界面
  16. Persistent Bugger 实践练习
  17. speedoffice表格如何全选表格
  18. 删除node_modules文件夹太慢
  19. ubuntu 7.04 硬盘安装与安装后的常用软件的安装与配置 [zz]
  20. Docker | 自定义网络(网关、子网地址)

热门文章

  1. 友价T5开发的网站源码交易平台
  2. oracle rac启停数据库,RAC启停全过程
  3. BUUCTF Reverse前五题解题记录
  4. 如何批量缩小图片尺寸?
  5. 校尉羽书飞瀚海,顺序表中增删改(Pt.2)
  6. DEVONthink Pro/Server 3.6.3 中文版 文件管理用具
  7. 随机漫步模拟及概率分析
  8. 论文阅读(2) 使用DeepPIV揭示深海中神秘的粘液结构(2020)
  9. 蔡徐坤:千万级“顶流”的背后,到底有多少真实成绩?
  10. 16.355J / ESD.355J 软体工程概念