Python之glob模块的使用
glob模块的作用:
文件名的匹配,通俗的说,就是根据文件名查找。
1、生成测试的目录代码
import os def mkfile(filename): print(filename) with open(filename, 'w', encoding='utf-8') as f: f.write('\n') print('dir') os.mkdir('dir') mkfile('dir/file.txt') mkfile('dir/file1.txt') mkfile('dir/file2.txt') mkfile('dir/filea.txt') mkfile('dir/fileb.txt') mkfile(r'dir/file?.txt') mkfile(r'dir/file*.txt') mkfile(r'dir/file[.txt') print('dir/subdir') os.mkdir('dir/subdir') mkfile('dir/subdir/subfile.txt')
运行结果
[root@python-mysql opt]# python3 glob_maketestdata.py dir dir/file.txt dir/file1.txt dir/file2.txt dir/filea.txt dir/fileb.txt dir/file?.txt dir/file*.txt dir/file[.txt dir/subdir dir/subdir/subfile.txt
# 目录的结构 [root@python-mysql opt]# tree dir/ dir/ ├── file1.txt ├── file2.txt ├── filea.txt ├── fileb.txt ├── file?.txt ├── file.txt ├── file[.txt ├── file*.txt └── subdir └── subfile.txt
需要注意的是:Windows,文件名不支持*,能运行成功的有unix,linux系统
2、利用通配符查询所有的文件名
import glob for name in sorted(glob.glob('./dir/*')): print(name)
运行结果
[root@python-mysql opt]# python3 glob_asterisk.py ./dir/file*.txt ./dir/file.txt ./dir/file1.txt ./dir/file2.txt ./dir/file?.txt ./dir/file[.txt ./dir/filea.txt ./dir/fileb.txt ./dir/subdir
3、利用通配符查询子目录的所有文件名
import glob print('明确命名:') for name in sorted(glob.glob('dir/subdir/*')): print(' {}'.format(name)) print('=====================') print('以通配符命名:') for name in sorted(glob.glob('dir/*/*')): print(' {}'.format(name))
运行结果
[root@python-mysql opt]# python3 glob_subdir.py.py 明确命名: dir/subdir/subfile.txt ===================== 以通配符命名: dir/subdir/subfile.txt
4、利用通配符?表示未知一个字符,来进行查找文件路径
import glob for name in sorted(glob.glob('dir/file?.txt')): print(name)
运行结果
[root@python-mysql opt]# python3 glob_question.py dir/file*.txt dir/file1.txt dir/file2.txt dir/file?.txt dir/file[.txt dir/filea.txt dir/fileb.txt
5、指定字符区间,查询文件路径[a-z]、[A-Z]、[0-9]等
import glob for name in sorted(glob.glob('dir/*[0-9].*')): print(name)
运行结果
[root@python-mysql opt]# python3 glob_charrange.py
dir\file1.txt
dir\file2.txt
6、需要转义字符后,查找文件目录
import glob specials = '?*[' for char in specials: pattern = 'dir/*' + glob.escape(char) + '.txt' for name in glob.glob(pattern): print(name)
运行结果
[root@python-mysql opt]# python3 glob_escape.py dir/file?.txt dir/file*.txt dir/file[.txt
7、根据扩展名过滤文件
import glob for name in sorted(glob.glob('*.py')): print(name)
运行结果
server.py
glob_extension.py