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():仅在当前目录中搜索,不递归。适合只需要在当前目录中查找的情况。

这两个方法可以根据具体需求选择使用,灵活地处理文件和目录的匹配任务。

posted @ 2024-07-11 09:24  做梦当财神  阅读(307)  评论(0编辑  收藏  举报