小前言:
本人Python小白,因为最近想整理下近10几年的老照片,然后就有了写脚本批处理的想法。初始需求其实很简单,就是筛选自己想要的照片到指定文件夹,然后按照exif信息重命名照片为拍摄时间_拍摄设备.jpg,比如20180101_122334_E-M10.jpg代表的是2018年01月01日12点23分34秒用E-M10拍的照片。
这个算不上教程,不会全面地介绍某个库,只是我在折腾过程中的小摘要小想法,
如有错误请指出,如有疑问当然也欢迎留言相互讨论。
Glob库
这里从Glob库出发,遍历指定文件夹中jpg文件。Python官方文献:https://docs.python.org/3/library/glob.html
以py文件同目录下sample文件夹为例:
sample下有子文件夹sampleBackup, 3个jpg文件和1个txt文件;
sampleBackup含有2个jpg文件,如下图
![ce6bbcc50697f00e62e5bdf09ec957d9.png](https://i-blog.csdnimg.cn/blog_migrate/599abbdfce1ac73338557191ed054c8c.jpeg)
sample文件夹结构
glob
glob.glob(pathname, *, recursive=False)
最简单的glob使用方法,遍历.sample路径下的所有jpg文件glob默认下是不会遍历子文件夹,recursive=False可省略
import globfor filepath in glob.glob(r".sample*.jpg"): print(filepath)
运行结果:
.sampleP1020523.jpg.sampleP7200248-2.jpg.sampleP7200258-2.jpg
glob.glob(pathname, *, recursive=True)
如果需要一并查找n级目录下文件,则需要扩展路径,
这里以二级目录sampleBackup为例:
import globfor filepath in glob.glob(r".sample***.jpg", recursive = True): print(filepath)
运行结果:
.sampleP1020523.jpg.sampleP7200248-2.jpg.sampleP7200258-2.jpg.samplesampleBackupP7200248-2.jpg.samplesampleBackupP7200258-2.jpg
iglob
iglob用法和glob相似,如果使用按照以上两个例子使用,输出结果是相同的。
import globprint("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:.sampleP1020523.jpg.sampleP7200248-2.jpg.sampleP7200258-2.jpg-----------------------------------------------------------------.sampleP1020523.jpg.sampleP7200248-2.jpg.sampleP7200258-2.jpg.samplesampleBackupP7200248-2.jpg.samplesampleBackupP7200258-2.jpg=================================================================iglob:.sampleP1020523.jpg.sampleP7200248-2.jpg.sampleP7200258-2.jpg-----------------------------------------------------------------.sampleP1020523.jpg.sampleP7200248-2.jpg.sampleP7200258-2.jpg.samplesampleBackupP7200248-2.jpg.samplesampleBackupP7200258-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: ['.sampleP1020523.jpg', '.sampleP7200248-2.jpg', '.sampleP7200258-2.jpg'].sampleP1020523.jpg.sampleP7200248-2.jpg.sampleP7200258-2.jpg=================================================================iglob:.sampleP1020523.jpg.sampleP7200248-2.jpg.sampleP7200258-2.jpg=================================================================