glob模块
-
简介:glob模块会根据Unixshell规则,找到匹配上特定格式的所有文件和文件夹,跟windows的文件搜索功能差不多。
-
查找文件只用到了3种匹配符:
- "*"匹配0个或多个字符。
- "?"匹配单个字符。
- "[]"匹配指定范围内的字符
-
glob模块并非调用一个子shell实现搜索功能,而是在内部调用了os.listdir()和fnmatch.fnmatch()。
-
主要方法:glob.glob() ,glob.iglob() 和glob.escape()
glob()方法:
-
描述:glob()返回所有匹配的文件路径列表(list)
-
语法:
glob.glob(pathname,recursive=False)
-
参数:
pathname -- 需要匹配的字符串。(该参数应尽量加上r前缀,以免发生不必要的错误) recursive -- 代表递归调用,与特殊通配符“**”一同使用,默认为False。在3.5版本之后,glob函数支持一个特殊的通配符“**”,该通配符可以匹配指定路径里所有文件和目录,包括子目录里的所有文件和目录。相当于递归地调用了这个函数。使用这个通配符必须加上recursive=True参数。
-
返回值
返回一个符合条件的路径的字符串列表
示例:
import glob
print("F盘下以exe结尾文件:", glob.glob("F:/*.exe"))
print("当前路径下的py文件:", glob.glob('./*.py'))
print("当前路径下以一个数字开头以.txt结尾的文件:", glob.glob('./[0-9]*.txt'))
print("当前路径下的所有文件列表:", glob.glob('*'))
print("当前路径下的所有以.txt结尾的文件:", glob.glob('*.txt'))
print("当前路径下的所有文件:", glob.glob("./*"))
print("-" * 120)
# 当前路径下的所有txt文件
for i in glob.glob("**/*.txt", recursive=True):
print(i)
结果:
F盘下以exe结尾文件: ['F:/03-ZhiyunTrans6.4.3.3_setup.exe', 'F:/apipost3.2.3_setup_x64.exe', 'F:/Hearthstone-Setup-CN.exe', 'F:/kyzip_v3.2.2.3_rywy_008.exe', 'F:/VSCodeUserSetup-x64-1.49.2.exe', 'F:/WeGameMiniLoader.std.2.07.29.1736.exe', 'F:/XunLeiWebSetup10.1.38.890gw.exe', 'F:/知云文献翻译_023287310.exe']
当前路径下的py文件: ['.\\test1.py']
当前路径下以一个数字开头以.txt结尾的文件: ['.\\1231564.txt', '.\\4454.txt', '.\\666.txt']
当前路径下的所有文件列表: ['1231564.txt', '4454.txt', '666.txt', 'ad.txt', 'mm', 'sss.txt', 'test1.py']
当前路径下的所有以.txt结尾的文件: ['1231564.txt', '4454.txt', '666.txt', 'ad.txt', 'sss.txt']
当前路径下的所有文件: ['.\\1231564.txt', '.\\4454.txt', '.\\666.txt', '.\\ad.txt', '.\\mm', '.\\sss.txt', '.\\test1.py']
------------------------------------------------------------------------------------------------------------------------
1231564.txt
4454.txt
666.txt
ad.txt
sss.txt
mm\aaa.txt
mm\nn\nnn.txt
Process finished with exit code 0
iglob()方法
-
描述:iglob函数是一个迭代器(或者叫做generator,生成器,发动机),规则和参数都与glob函数一致,不同的是,glob函数一次性的返回了所有的结果,而iglob函数是一个一个的返回结果。
-
语法:
glob.iglob(pathname,recursive=False)
-
参数:与glob()一致
-
返回值:
一个迭代器
-
注意:glob默认不匹配以点符号(.)开始的文件,若要匹配需要加上
示例:
import glob
s = glob.iglob("./*.txt")
print(s)
print(type(s))
print("=" * 120)
for i in s:
print(i)
结果:
<generator object _iglob at 0x000001F83C3E1C80>
<class 'generator'>
========================================================================================================================
.\1231564.txt
.\4454.txt
.\666.txt
.\ad.txt
.\sss.txt
escape()方法
-
描述:escape就是“离开glob规则特别符号的原有含义”的意思。它返回的是一个glob规则
-
语法:
glob.escape(pathname)
-
参数:
pathname -- 字符串
-
返回值:
一个忽略所有通配符的glob规则。可以用于匹配可能有特殊字符的任意字符串。
示例:
import glob
print(glob.escape('./*.txt'))
结果:
./[*].txt