在有些时候我们会需要按照照片的修改时间来进行排序(最常见的就是将照片整理成序列然后做成视频)。但有些时候这些图片的命名没有按照对应的顺序进行排列,这时候我们就需要手动修改并调整这些序列。一种快速的解决方案是使用python根据照片修改时间排序重命名。这涉及到python图片批量重命名的内容,让我们来学习一下吧。
一、Background
当想将照片序列合成延时摄影视频时,可能会发现照片中缺少一张,或者照片序列是跨时间、并不连续的,如图1所示,但PR中只有连续的照片序列才能导入。
图1 时间不连续序列
二、Method
这时往往需要将照片按照修改时间重命名,下面写了一个很简单的python脚本,理论上来说支持10000张照片以内的照片序列重命名,操作如下:
1.将照片备份(没有undo机制,以免脚本失误无法撤销)
2.将rename.exe文件放入照片文件中,双击即可重命名(不可更改名字)。如果安装过python,也可以直接双击脚本文件。
图2 操作演示
三、Code
import os def reNameByTime(path): mlist = [] # 获取文件名列表 files = os.listdir(path) # 获得名称带时间戳的新文件名列表 for filename in files: # 获得文件的最后修改时间 modifytimes = os.path.getmtime(path + filename) filename_lower = filename.lower() # 筛选.jpg格式 if ".jpg" in filename_lower: mlist.append(str(int(modifytimes)) + "-" + filename) # .jpg mlist = sorted(mlist) # 遍历修改时间戳为序号 for i in range(len(mlist)): # 截取获得原先的文件名 oldname = mlist[i][11:] # 切片操作,从11至后 # 将时间戳部分修改为序号,得到新的文件名 if (i + 1) < 10: # 0-9 newname = "000" + str(i + 1) + ".jpg" elif (i + 1) > 9 and (i + 1) < 100: # 10-100 newname = "00" + str(i + 1) + ".jpg" elif (i + 1) > 99 and (i + 1) < 1000: # 100-1000 newname = "0" + str(i + 1) + ".jpg" else: newname = str(i + 1) + ".jpg" # 1000 - 9999 # print(newname, oldname) # 重命名文件,按修改时间排序并加序号前缀 os.rename(path + oldname, path + newname) #如果想执行py文件,可以将后缀改为“.py”,如果想打包成exe,需要将后缀改为“.exe” if __name__ == "__main__": filepath = os.sys.argv[0].replace("rename.py", "") print(os.sys.argv[0]) reNameByTime(filepath)
如果想按照其他时间进行排序:
# os.path.getatime(file) 输出文件访问时间 # os.path.getctime(file) 输出文件的创建时间 # os.path.getmtime(file) 输出文件最近修改时间
如果想对其他类型的文件进行排序,更改对应后缀名即可。
总结
到此这篇python图片批量重命名的相关文章就介绍到这里了,希望能对小伙伴有一定帮助,也希望大家以后多多支持W3Cschool!