欢迎访问宙启技术站
智能推送

Python中glob模块的多个匹配模式和选择器的用法

发布时间:2023-12-25 11:59:43

在Python中,glob模块是用于匹配文件路径的模块。它根据用户提供的模式进行文件路径的匹配和查询。

glob模块使用了一种类似正则表达式的语法来匹配文件路径,常见的通配符有*?[]

下面是glob模块中多个匹配模式和选择器的用法,以及带有使用示例的解释:

1. *:匹配任意个任意字符(除了路径分隔符),0个字符也可以。使用*可以匹配任意长度的文件名。

   import glob

   files = glob.glob('dir/*.txt')  # 匹配dir目录下的所有txt文件
   

2. ?:匹配单个任意字符。

   files = glob.glob('dir/file?.txt')  # 匹配dir目录下名为file1.txt、file2.txt等的文件
   

3. []:指定匹配的字符范围。注意,[]中的字符范围不支持-。如果要匹配-字符本身,需要将其放在[]的开头或结尾。

   files = glob.glob('dir/[0-9].txt')  # 匹配dir目录下名为1.txt、2.txt等的文件
   files = glob.glob('dir/[ab].txt')  # 匹配dir目录下名为a.txt和b.txt的文件
   files = glob.glob('dir/[a-c].txt')  # 匹配dir目录下名为a.txt、b.txt和c.txt的文件
   files = glob.glob('dir/[-ab].txt')  # 匹配dir目录下名为-.txt、a.txt和b.txt的文件
   

4. **:匹配多个目录或文件。**可以匹配任意层级的目录。

   files = glob.glob('dir/**/*.txt')  # 匹配dir目录及其子目录中的所有txt文件
   

5. ():分组匹配。可以使用()将多个匹配模式分组。

   files = glob.glob('dir/(file1|file2).txt')  # 匹配dir目录下的file1.txt和file2.txt文件
   files = glob.glob('dir/[abc](1|2).txt')  # 匹配dir目录下的a1.txt、a2.txt、b1.txt、b2.txt、c1.txt和c2.txt文件
   

6. {}:指定多个匹配。可以使用{}将多个匹配模式指定在一起。

   files = glob.glob('dir/{*.txt,*.pdf}')  # 匹配dir目录下的所有txt和pdf文件
   files = glob.glob('dir/{file?,file??}.txt')  # 匹配dir目录下的file1.txt、file2.txt等文件
   

7. glob()函数还可以选择不同的返回结果。

- glob.glob(pathname, recursive=False):返回所有匹配模式的文件路径列表。如果recursive参数为True,则会递归匹配子目录。

- glob.iglob(pathname, recursive=False):返回匹配模式的文件路径生成器,使用时需要用next()获取结果。使用生成器可以减少内存占用,适用于大量的匹配文件。

- glob.escape(pathname):对文件路径进行转义。

以上是glob模块中多个匹配模式和选择器的用法,可以根据不同的需求使用不同的模式和选择器来进行文件路径的匹配。