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("修改完成")