首页 > 解决方案 > 在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))

以上所有都不起作用。

标签: pythonglob

解决方案


?匹配单个字符,*匹配任意数量的字符(甚至没有)。由于您要匹配包含 的任何名称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


推荐阅读