python glob module

简介

glob —查找符合特定规则的文件路径名

Source code: Lib/glob.py

匹配符:

  • * 匹配0个或多个字符
  • ? 匹配单个字符
  • [] 匹配指定范围内的字符,如:[0-9]匹配数字

属性

python2.7

1
2
3
>>> import glob
>>> dir(glob)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_unicode', 'fnmatch', 'glob', 'glob0', 'glob1', 'has_magic', 'iglob', 'magic_check', 'os', 're', 'sys']

python3.7

1
2
3
>>> import glob	     
>>> dir(glob)
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_glob0', '_glob1', '_glob2', '_iglob', '_ishidden', '_isrecursive', '_iterdir', '_rlistdir', 'escape', 'fnmatch', 'glob', 'glob0', 'glob1', 'has_magic', 'iglob', 'magic_check', 'magic_check_bytes', 'os', 're']

用法

1
2
3
4
5
6
7
目录结构:
D:\Practice:
1.gif
2.txt
card.gif
sub
3.txt

python2.7

glob.glob(pathname)

根据路径名匹配模式,返回一个路径名列表,可能为空。

路径名应是包含路径规范的字符串,可以是相对路径,亦可是绝对路径,返回形式取决于匹配模式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> import os
>>> import glob

>>> os.getcwd()
'D:\\Practice'

# 相对路径
>>> glob.glob('*.txt')
['2.txt']
>>> glob.glob('[0-9].*')
['1.gif', '2.txt']

# 绝对路径
>>> glob.glob(os.getcwd() + os.sep +'*.txt')
['D:\\Practice\\2.txt']
>>> glob.glob(os.getcwd() + os.sep +'[0-9].*')
['D:\\Practice\\1.gif', 'D:\\Practice\\2.txt']

glob.iglob(pathname)

根据路径名匹配模式,返回一个路径名列表的迭代器

python3.7

glob.glob(pathname, *, recursive=False)

根据路径名匹配模式,返回一个路径名列表,可能为空。

路径名应是包含路径规范的字符串,可以是相对路径,亦可是绝对路径,返回形式取决于匹配模式。

recursive为真,则模式“**”将匹配任何文件以及零个或多个目录和子目录。如果模式后面跟着一个os.sep,只有目录和子目录匹配。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
>>> import os
>>> import glob

>>> os.getcwd()
'D:\\Practice'
>>> os.listdir()
['1.gif', '2.txt', 'card.gif', 'sub']

# 相对路径
>>> glob.glob('*.txt', recursive=False)
['2.txt']
>>> glob.glob('[0-9].*', recursive=False)
['1.gif', '2.txt']

# 绝对路径
>>> glob.glob(os.getcwd() + os.sep +'*.txt', recursive=False)
['D:\\Practice\\2.txt']
>>> glob.glob(os.getcwd() + os.sep +'[0-9].*', recursive=False)
['D:\\Practice\\1.gif', 'D:\\Practice\\2.txt']

# 若recursive=True,需配合"**"使用
>>> glob.glob('**' + os.sep + '*.txt', recursive=True)
['2.txt', 'sub\\3.txt']

>>> glob.glob('**' + os.sep, recursive=True)
['sub\\']
>>> glob.glob('.' + os.sep + '**' + os.sep, recursive=True)
['.\\', '.\\sub\\']

注: 在一个较大的目录树中使用 "**" 模式可能会消耗非常多的时间。

glob.iglob(pathname, *, recursive=False)

根据路径名匹配模式,返回一个路径名列表的迭代器

escape(pathname)

转义所有特殊字符。

-------------本文结束感谢您的阅读-------------