在Glob中使用部分通配符

时间:2017-06-29 17:17:02

标签: python 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'

但我不确定如何继续。我没有看到fnmatchglob的明确路径,但我并不精通这些库。

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

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

会产生:

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

然后执行类似

的操作
glob(filename):

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

有什么想法?谢谢!

2 个答案:

答案 0 :(得分:1)

这应该有效,星号符号*也应该是一个字符串。

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

答案 1 :(得分:1)

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

fnmatch.fnmatchfnmatch.filter用于filenmaes。前者测试文件名是否与模式匹配,并返回匹配名称的True,否则False表示不匹配的名称。后者根据给定的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