Python(glob()、rglob())
目录
在 Python 中,rglob()
和 glob()
都是 pathlib.Path
类的方法,用于匹配指定模式的文件或目录。它们的主要区别在于是否递归地搜索子目录。
rglob()
方法
- 全称:递归全局匹配(recursive global match)。
- 用途:递归地遍历目录及其所有子目录,并匹配给定的模式。
- 语法:
Path.rglob(pattern)
- 参数:
pattern
:要匹配的模式,可以使用通配符(如*
、?
、**
等)。
- 返回值:生成器,生成与模式匹配的
Path
对象。
glob()
方法
- 全称:全局匹配(global match)。
- 用途:在当前目录中匹配给定的模式,不递归搜索子目录。
- 语法:
Path.glob(pattern)
- 参数:
pattern
:要匹配的模式,可以使用通配符(如*
、?
等)。
- 返回值:生成器,生成与模式匹配的
Path
对象。
具体区别
递归搜索
rglob()
:会递归搜索当前目录及其所有子目录。glob()
:仅在当前目录中搜索,不会递归进入子目录。
示例
假设有如下目录结构:
/example_dir/
├── file1.txt
├── file2.txt
├── subdir1/
│ ├── file3.txt
│ └── file4.py
└── subdir2/
├── file5.py
└── subsubdir/
└── file6.txt
使用 rglob()
递归搜索所有 .txt
文件
from pathlib import Path
p = Path('/example_dir')
# 使用 rglob() 方法查找所有的 .txt 文件
for txt_file in p.rglob('*.txt'):
print(txt_file)
# 输出:
# /example_dir/file1.txt
# /example_dir/file2.txt
# /example_dir/subdir1/file3.txt
# /example_dir/subdir2/subsubdir/file6.txt
使用 glob()
仅在当前目录搜索 .txt
文件
from pathlib import Path
p = Path('/example_dir')
# 使用 glob() 方法查找所有的 .txt 文件
for txt_file in p.glob('*.txt'):
print(txt_file)
# 输出:
# /example_dir/file1.txt
# /example_dir/file2.txt
在当前目录和子目录中搜索 .txt
文件(通过 glob
和 **
组合)
from pathlib import Path
p = Path('/example_dir')
# 使用 glob() 方法结合 '**' 模式查找所有的 .txt 文件
for txt_file in p.glob('**/*.txt'):
print(txt_file)
# 输出:
# /example_dir/file1.txt
# /example_dir/file2.txt
# /example_dir/subdir1/file3.txt
# /example_dir/subdir2/subsubdir/file6.txt
总结
rglob()
:用于递归搜索,包括当前目录及其所有子目录。适合需要全面扫描目录树的情况。glob()
:仅在当前目录中搜索,不递归。适合只需要在当前目录中查找的情况。
这两个方法可以根据具体需求选择使用,灵活地处理文件和目录的匹配任务。