python的glob库_【按需学Python】 1. Glob库遍历路径/文件

小前言(请跳过):

本人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

=================================================================

你可能感兴趣的:(python的glob库)