我想遍历一个树结构,但只有那些与通配符表达式相匹配的部分,一个la python glob,其中双星号表示'任意数量的子目录'。
例如,假设我的通配符表达式是/ * / foo / ** / bar /。这将匹配/ a / foo / bar /,/ b / foo / note / bar /,但不匹配/ a / bar / foo / bar /。你明白了。
我的问题是,当遍历树结构时,我需要知道当前目录是否可能匹配通配符表达式作为前缀。所以我确实想要遍历目录/ a /,而不是/ a / bar /,因为我知道后者永远不会匹配通配符表达式。
通配符表达式我当然会重写为正则表达式。
答案 0 :(得分:0)
考虑以下启动器代码。我假设您将路径和模式中的每个“目录”作为一对列表中的元素:
def traverse(pattern_list, path_list):
if pattern_list[0] == '**':
traverse_children(pattern_list, path_list[1:])
if current_matches(pattern_list[0], path_list[0]):
traverse_children(pattern_list[1:], path_list[1:])
# Other things you might want to do in the case of a valid prefix
def current_matches(pattern_atom, path_atom):
return pattern_atom in (path_atom, '*', '**')