小前言(请跳过):
本人Python小白,因为最近想整理下近10几年的老照片,然后就有了用脚本批处理照片的想法。
初始需求其实很简单,就是筛选自己想要的照片到指定文件夹,然后按照exif信息重命名照片为拍摄时间_拍摄设备.jpg,比如20180101_122334_E-M10.jpg代表的是2018年01月01日12点23分34秒用E-M10拍摄的照片。
这个算不上教程,不会全面地介绍某个库,只是我在折腾过程中的小摘要小想法,
如有错误请指出,如有疑问当然也欢迎留言相互讨论。
Glob库
这里从Glob库出发,遍历指定文件夹中jpg文件。
以py文件同目录下sample文件夹为例:
sample下有子文件夹sampleBackup, 3个jpg文件和1个txt文件;
sampleBackup含有2个jpg文件,如下图
sample文件夹结构
glob.glob(pathname, *, recursive=False)
最简单的glob使用方法,遍历.\sample\路径下的所有jpg文件
glob默认下是不会遍历子文件夹,recursive=False可省略
import glob
for filepath in glob.glob(r'.\sample\*.jpg'):
print(filepath)
运行结果:
.\sample\P1020523.jpg
.\sample\P7200248-2.jpg
.\sample\P7200258-2.jpg
glob.glob(pathname, *, recursive=True)
如果需要一并查找n级目录下文件,则需要扩展路径,
这里以二级目录sampleBackup为例:
import glob
for filepath in glob.glob(r'.\sample\**\*.jpg', recursive = True):
print(filepath)
运行结果:
.\sample\P1020523.jpg
.\sample\P7200248-2.jpg
.\sample\P7200258-2.jpg
.\sample\sampleBackup\P7200248-2.jpg
.\sample\sampleBackup\P7200258-2.jpg
iglob用法和glob相似,如果使用按照以上两个例子使用,输出结果是相同的。
import glob
print("glob:")
for filepath in glob.glob(r'.\sample\*.jpg'):
print(filepath)
print("-----------------------------------------------------------------")
for filepath in glob.glob(r'.\sample\**\*.jpg', recursive = True):
print(filepath)
print("=================================================================")
print("iglob:")
for filepath in glob.iglob(r'.\sample\*.jpg'):
print(filepath)
print("-----------------------------------------------------------------")
for filepath in glob.iglob(r'.\sample\**\*.jpg', recursive = True):
print(filepath)
print("=================================================================")
运行结果:
glob:
.\sample\P1020523.jpg
.\sample\P7200248-2.jpg
.\sample\P7200258-2.jpg
-----------------------------------------------------------------
.\sample\P1020523.jpg
.\sample\P7200248-2.jpg
.\sample\P7200258-2.jpg
.\sample\sampleBackup\P7200248-2.jpg
.\sample\sampleBackup\P7200258-2.jpg
=================================================================
iglob:
.\sample\P1020523.jpg
.\sample\P7200248-2.jpg
.\sample\P7200258-2.jpg
-----------------------------------------------------------------
.\sample\P1020523.jpg
.\sample\P7200248-2.jpg
.\sample\P7200258-2.jpg
.\sample\sampleBackup\P7200248-2.jpg
.\sample\sampleBackup\P7200258-2.jpg
=================================================================
iglob和glob的区别
glob把遍历到的结果存储到一个list里,而iglob则是一个generator object
print("glob:")
globContent = glob.glob(r'.\sample\*.jpg')
print(type(globContent), globContent)
for content in globContent:
print(content)
print("=================================================================")
print("iglob:")
iglobContent = glob.iglob(r'.\sample\*.jpg')
print(type(iglobContent), iglobContent)
for content in iglobContent:
print(content)
print("=================================================================")
运行结果:
glob:
['.\\sample\\P1020523.jpg', '.\\sample\\P7200248-2.jpg', '.\\sample\\P7200258-2.jpg']
.\sample\P1020523.jpg
.\sample\P7200248-2.jpg
.\sample\P7200258-2.jpg
=================================================================
iglob:
.\sample\P1020523.jpg
.\sample\P7200248-2.jpg
.\sample\P7200258-2.jpg
=================================================================