如何以照片的拍摄时间批量重命名文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以照片的拍摄时间批量重命名文件相关的知识,希望对你有一定的参考价值。

参考技术A 问题:iphone手机拍摄的照片或保存的图片都是以IMG_XXX命名的,如何改成以拍摄时间或修改图片时间来命名,如改为IMG_20180715_233759.JPG

解决:
方式一:ReNamer
功能强大灵活的文件批量重命名工具,该程序支持包括插入、删除、移除、替换、前缀、后缀以及正则表达式等十四种重命名规则。

方式二:RenameXif
文件名样式设置了几个预设,也就有所限制;可以添加文件名前缀;无EXIF时可选择使用文件日期或忽略不处理;文件保存可选择替换原文件或另存其他目录;仅支持jpg格式的图片

方式三:根据相机JPG文件的EXIF信息批量重命名
软件名称就是这么长,功能如题。预设文件名样式,也可自定义改名规则;仅支持jpg格式的图片

方式四:导入照片时进行导入设置
iphone用数据线连接电脑后,打开“我的电脑”,找到“iPhone”图标,右键,选择“导入图片和视频”,在弹出窗口点击左下角“更多选项”,选择“文件名”,下拉菜单选择文件命名格式。

python应用之 重命名照片+照片归类

需要使用exifread库,获取照片的exif信息,来实现操作;

一、重命名照片的代码如下,可以实现将照片添加拍摄日期进行重命名操作:

import os
import exifread

#将路径下的图片,重命名为带日期的文件
def getExif(path):
    for root,dirs,files in os.walk(path,True):
        for file in files:
            old_full_file_name = os.path.join(path, file)
            FIELD = EXIF DateTimeOriginal
            fd = open(old_full_file_name, rb)
            tags = exifread.process_file(fd)
            fd.close()
            if FIELD in tags:
                new_name = str(tags[FIELD]).replace(:, ‘‘)[:8]+ _ + file
                new_full_file_name = os.path.join(path, new_name)
                tot = 1
                while os.path.exists(new_full_file_name):
                    new_full_file_name = os.path.splitext(new_full_file_name)[0] +_ + str(tot) +os.path.splitext(file)[1]
                    tot += 1
                print(old_full_file_name, " ---> ", new_full_file_name)
                os.rename(old_full_file_name, new_full_file_name)
            else:
                print(No {} found.format(FIELD),  in: , old_full_file_name)

#调用函数
getExif(E:/test)

 

二、将照片按照 年份月份 进行归类保存的实现代码:

import os
import exifread

#获取文件的时间
def getdate(filename):
    #以二进制方式,打开指定的文件
    f=open(filename,rb)
    #调用exifread来获取图片文件的exif信息
    data=exifread.process_file(f)
    if data:
        #如果获取到data值,则进行下述相关操作
        try:
            #获取EXIF DateTimeOriginal值,即为图片的创建时间
            t=data[EXIF DateTimeOriginal]
            print(t)
            #将获取到的时间进行格式转换,并仅保留年份和月份,然后返回
            return str(t).replace(":",".")[:7]
        except:
            pass
    #如果,未获取到图片的exif信息,则调用os.stat获取文件的系统信息
    state=os.stat(filename)
    #将文件的修改时间格式化,并返回
    return time.strftime("%Y.%m",time.localtime(state[-2]))

#照片分类整理函数
def classifyPictures(path):
    #利用os.walk获取目录下的文件夹和文件的名称及其目录路径
    for root,dirs,files in os.walk(path,True):
        for filename in files:
            #获取文件的完整路径
            file=os.path.join(root,filename)
            #获取文件的后缀名f
            p,f=os.path.splitext(file)
            if f.lower() not in (.jpg,.png,.mp4):
                continue
            try:
                t=getdate(file)
            except Exception as e:
                print(e)
                continue
            moveDir=root+/+t
            mf=moveDir+/+filename
            if not os.path.exists(moveDir):
                os.mkdir(moveDir)
            #复制文件
            shutil.copy2(file,mf)
            #文件复制后,删除文件
            os.remove(file)

#调用函数
classifyPictures(E:/movePictures)

 

注:此文参考文章

1、http://lanbing510.info/2015/09/21/ClassifyPictures.html

2、https://blog.csdn.net/LiJiancheng0614/article/details/45819873

以上是关于如何以照片的拍摄时间批量重命名文件的主要内容,如果未能解决你的问题,请参考以下文章

如何批量重命名带有序列号的照片文件夹中的文件

js 如何批量重命名文件

怎么批量重命名多个文件夹里的图片

如何给文件批量重命名?

文件重命名时快速添加时间前缀

用Java批量重命名文件