在 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.fnmatch
和 fnmatch.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
。
我没能找到这方面的用例,但基本上我是在尝试将 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.fnmatch
和 fnmatch.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
。