40行代码,解决工作中小痛点.批量提取照片信息及改名

python中exifread库可读取照片中信息。之前工作遇到一次让把照片名称改为GPS信息,并进行排序。想象中直接右键属性找到相关信息复制重命名就OK了,但显示是残酷的,打开那成千上万的照片瞬间崩溃,这时候想到python,仅仅用了40多行代码,解决了我三天的工作。

主要过程就两部分:

第一步,文件名读取和修改,读取文件夹内照片文件路径,调用照片处理函数,并对处理后的文件进行修改。

    def rename_subfolders(self, path):  # 定义函数名称
        old_names = os.listdir(path)  # 取路径下的文件名,生成列表
        count = 0
        for old_name in old_names:  # 遍历列表下的文件名
            # 代码本身文件路径,防止脚本文件放在path路径下时,被一起重命名
            if old_name != sys.argv[0] and old_name != "说明.txt":
                # 将原来名字里的‘test’替换为‘test2’
                f_path = path+"\\"+old_name
                count += 1
                new_name = self.readGPS(f_path, count)
                # print(new_name)
                os.rename(os.path.join(path, old_name),
                          os.path.join(path, new_name))
                if count == 1:
                    with open(os.path.join(path, "说明.txt"), "w") as f:
                        f.write(new_name+'\n')
                else:
                    with open(os.path.join(path, "说明.txt"), "a") as f:
                        f.write(new_name+'\n')

第二部分采用exifread库读取照片信息加以保存

    def readGPS(self, path, count):
        f = open(path, 'rb')
        contents = exifread.process_file(f)
        f.close()
        # print(path.split(".")[-1])
        GPSLongitude = eval(str(contents['GPS GPSLongitude']))
        GPSLongitude = str(GPSLongitude[0]) + \
            str(GPSLongitude[1])+str(GPSLongitude[2])
        GPSLatitude = eval(str(contents['GPS GPSLatitude']))
        GPSLatitude = str(GPSLatitude[0]) + \
            str(GPSLatitude[1])+str(GPSLatitude[2])
        return str(count)+'__'+GPSLongitude+','+GPSLatitude+'.'+path.split(".")[-1

 

具体的效果就是就是这样了。

分享一下完整的代码:

import os
import sys
import exifread


class ReName():
    def rename_subfolders(self, path):  # 定义函数名称
        old_names = os.listdir(path)  # 取路径下的文件名,生成列表
        count = 0
        for old_name in old_names:  # 遍历列表下的文件名
            # 代码本身文件路径,防止脚本文件放在path路径下时,被一起重命名
            if old_name != sys.argv[0] and old_name != "说明.txt":
                # 将原来名字里的‘test’替换为‘test2’
                f_path = path+"\\"+old_name
                count += 1
                new_name = self.readGPS(f_path, count)
                # print(new_name)
                os.rename(os.path.join(path, old_name),
                          os.path.join(path, new_name))
                if count == 1:
                    with open(os.path.join(path, "说明.txt"), "w") as f:
                        f.write(new_name+'\n')
                else:
                    with open(os.path.join(path, "说明.txt"), "a") as f:
                        f.write(new_name+'\n')

    def readGPS(self, path, count):
        f = open(path, 'rb')
        contents = exifread.process_file(f)
        f.close()
        # print(path.split(".")[-1])
        GPSLongitude = eval(str(contents['GPS GPSLongitude']))
        GPSLongitude = str(GPSLongitude[0]) + \
            str(GPSLongitude[1])+str(GPSLongitude[2])
        GPSLatitude = eval(str(contents['GPS GPSLatitude']))
        GPSLatitude = str(GPSLatitude[0]) + \
            str(GPSLatitude[1])+str(GPSLatitude[2])
        return str(count)+'__'+GPSLongitude+','+GPSLatitude+'.'+path.split(".")[-1]


if __name__ == '__main__':
    path = input("请输入文件夹路径:")  # 运行程序前,记得修改主文件夹路径!
    R = ReName()
    R.rename_subfolders(path)
    print("修改完成")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值