在 Glob 中使用部分通配符

Using partial wildcard in Glob

我没能找到这方面的用例,但基本上我是在尝试将 glob 用于文件名的一部分。

file_name_date = time.strftime("%m%d%y")
h_server = time.strftime("%-I%p")    
filename = 'PRD.FRB.D01.INTRADAY.GGV1051.' + file_name_date + '.' + h_server + '.txt'

这在我的代码中工作正常,但是现在 GGV1051 随每个文件而变化,所以我希望做类似

的事情
filename = glob('PRD.FRB.D01.INTRADAY.' + * + '.' + file_name_date + '.' + h_server + '.txt'

但我不确定如何进行。我没有看到 fnmatch or glob 的清晰路径,但我对这些库并不精通。

我的想法是创建一个这样的字符串:

filename = str('PRD.FRB.D01.INTRADAY.?.' + file_name_date + '.' + h_server + '.txt')

这将产生:

PRD.FRB.D01.INTRADAY.?.062917.12P.txt

然后做类似

的事情
glob(filename):

但这并不像预期的那样有效。

有什么想法吗?谢谢!

这应该可以,星号 * 也应该是一个字符串。

import glob
all_files = [] 
for file in glob.glob('PRD.FRB.D01.INTRADAY.*.' + file_name_date + '.' + h_server + '.txt''):
    all_files.append(file)

使用 glob/home/juser directory 中的所有文本文件匹配 /home/juser/something/*.txt 等路径名。您可以使用它来为当前工作目录中的所有文本文件匹配简单的文件名,例如 *.txt

fnmatch.fnmatchfnmatch.filter 用于文件名。前者测试文件名是否与模式匹配,returns True 匹配名称,否则 False 不匹配名称。后者,returns 根据给定的 glob 模式匹配的文件名。

您所有的文件名都以 PRD.FRB.D01.INTRADAY 开头。并以.txt后缀结尾,则匹配所有以PRD.FRB.D01.INTRADAY开头的文件。并以 .txt 结尾,不管中间是什么:

glob.glob("PRD.FRB.D01.INTRADAY.*.txt") 

此 glob 匹配任何以 PRD.FRB.D01.INTRADAY 开头的文件名。并以 .txt 后缀结尾,PRD.FRB.D01.INTRADAY 后面的内容无关紧要。 * 通配符匹配任意字符。 ? 只匹配一个任意字符。注意,这与脚本工作目录中的文件名相匹配。如果您需要匹配不同目录中的名称,请将 "/path/to/my/PRD.FRB.D01.INTRADAY.*.txt" 传递给 glob