glob 语法未按预期工作([] *)
glob syntax working not as expected( [ ] *)
我有一个包含 4 个文件的文件夹。
- Keras_entity_20210223-2138.h5
- intent_tokens.pickle
- word_entity_set_20210223-2138.pickle
- LSTM_history.h5
我使用了代码:
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
开头。
明确地说,它按预期工作。您的期望不正确。
我有一个包含 4 个文件的文件夹。
- Keras_entity_20210223-2138.h5
- intent_tokens.pickle
- word_entity_set_20210223-2138.pickle
- LSTM_history.h5
我使用了代码:
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
开头。
明确地说,它按预期工作。您的期望不正确。