YAML ファイルがあり、特定のフィールドに空白が含まれないように制限したいと考えています。
私の試みを示すスクリプトは次のとおりです。
test.py
#!/usr/bin/env python3
import os
from ruamel import yaml
def read_conf(path_to_config):
if os.path.exists(path_to_config):
conf = open(path_to_config).read()
return yaml.load(conf)
return None
if __name__ == "__main__":
settings = read_conf("hello.yaml")
print("type of name: {0}, repr of name: {1}".format(type(
settings['foo']['name']), repr(settings['foo']['name'])))
if any(c.isspace() for c in settings['foo']['name']):
raise Exception("No whitespace allowed in name!")
YAML ファイルの最初のカットを次に示します。
こんにちは.yaml
foo:
name: "hello\t"
上記の YAML ファイルでは、例外が正しく発生します。
type of name: <class 'str'>, repr of name: 'hello\t'
Traceback (most recent call last):
File "./test.py", line 16, in <module>
raise Exception("No whitespace allowed in name!")
Exception: No whitespace allowed in name!
ただし、二重引用符を一重引用符に変更しても、例外は発生しません。
08:23 $ ./test.py
type of name: <class 'str'>, repr of name: 'hello\\t'
この動作は、 と を使用ruamel.yaml==0.11.11
した場合の両方で発生しPyYAML=3.11
ます。
私が理解しているように、YAML 仕様ではそれらの間に機能的な違いがないのに、これらの Python YAML パーサーで一重引用符と二重引用符に違いがあるのはなぜですか? 特殊文字がエスケープされないようにするにはどうすればよいですか?