glob 语法未按预期工作([] *)

glob syntax working not as expected( [ ] *)

我有一个包含 4 个文件的文件夹。

我使用了代码:

NER_MODEL_FILEPATH = glob.glob("model/[Keras_entity]*.h5")[0]

它工作正常,因为 NER_MODEL_FILEPATH 是一个仅包含 Keras_entity 文件路径的列表。不选择其他 .h5 文件。

但是当我使用这段代码时:

WORD_ENTITY_SET_FILEPATH = glob.glob("model/[word_entity_set]*.pickle")[0]

它没有按预期工作,而不是只提取那个 word_entity_set 文件, 此列表包含这两个 pickle 文件。 为什么会这样?

您的代码选择了 intent_tokens.pickle 和 word_entity_set_20210223-2138.pickle,因为您的 glob 不正确。将 glob 更改为 "word_entity_set*.pickle"

当您使用 [<phrase>]*.pickle 时,您是在告诉 globber 匹配 <phrase> 中的任一字符加上任何字符,再加上 ".pickle"。所以“wordwordword.pickle”会匹配,所以会匹配:

  • wwww.pickle
  • .pickle
  • w.pickle

但是

  • xw.pickle
  • foobar.pickle

不会。

真正有无限的排列。

只需去掉方括号:word_entity_set*.pickle

根据 the docs:

[seq] matches any character in seq

所以 word_entity_set_20210223-2138.pickle 是匹配的,因为它以 w 开头,而 intent_tokens.pickle 是匹配的,因为它以 i 开头。

明确地说,它按预期工作。您的期望不正确。