在python中使用glob匹配字符串中的模式

问题描述

我有一个 glob 模式,我试图用它来匹配和选择一些文件。我正在测试它,它似乎只适用于通配符。文件示例如下,其中包括其他未列出但扩展名不同且我不需要的文件

240721_124607_1000_Y1_B.txt.bz2
240721_124607_1000_Z1_B.txt.bz2
240721_124607_1000_X1_B.txt.bz2

我使用的 glob 模式获取所有带有 bz2 扩展名的文件,即

files = glob.glob('Z:/{}/{}/DL/*.txt.bz2'.format(directory,folder))

以上有效,但我想缩小范围以仅获取 ZI 文件。我尝试了以下模式,但它们不起作用

files = glob.glob('Z:/{}/{}/DL/?Z1.txt.bz2'.format(directory,folder))

也试过了

files = glob.glob('Z:/{}/{}/DL/Z1*.txt.bz2'.format(directory,folder))

也试过了

files = glob.glob('Z:/{}/{}/DL/?Z1*.txt.bz2'.format(directory,folder))

以上都行不通。

解决方法

? 匹配单个字符,* 匹配任意数量的字符(甚至没有)。由于您希望匹配包含 Z1 的任何名称,因此您需要的表达式是:

files = glob.glob('Z:/{}/{}/DL/*Z1*.txt.bz2'.format(directory,folder))

请注意,这也将匹配任何类似的内容

Z1_Y1_B.txt.bz2
2407Z1_124607_1000_Y1_B.txt.bz2
2407Z1_124607_1000_X1_Z1.txt.bz2
etc.

只要在 Z1 之前和最后一个斜杠之后有 .txt.bz2,它就会匹配