从python字典写入YAML文件,其中包含特殊字符(星号,与号,*和&)

问题描述 投票:0回答:1

我有一个YAML文件,我需要将其导入python,以某种方式处理它,然后再次导出为YAML文件。更准确地说,我将YAML配置文件作为dict导入,生成许多具有更改参数的文件,然后将它们全部重新写入YAML文件。

我面临的问题是,在它们前面有带有特殊字符($,&)的参数:例如* target_size。

[当我在python中使用字典时,则此参数是字符串格式('* target_size')的字典值。当我写此字典时,因为保留了YAML文件格式,即在生成的YAML文件中用引号将'* target_size'括起来。我需要的只是* target_size,与原始文件中的相同。

我看过pyYaml文档和其他资源,但没有找到解决方案。

写入YAML文件的代码:

    with open(f'{PATH}/base_config.yml', 'w') as outfile:
         yaml.dump(config, outfile, default_flow_style=False, sort_keys=False)

original YAMLpython dictresulting file

python dictionary yaml config pyyaml
1个回答
0
投票

无引号的星号(*)和&符号(&)是YAML中的特殊字符,表示aliases and anchors。这些让YAML文档的一部分引用了YAML文档的另一部分。

当将YAML文档反序列化为Python数据结构时,您将丢失有关原始文档中存在的锚点和别名的任何信息。

当将Python数据结构序列化为YAML时,yaml模块将在适当的地方自动生成锚点和别名,以表示自引用数据结构。例如,鉴于此:

>>> import yaml
>>> doc = {'a': {'example': 'this is a test'}}
>>> doc['b'] = doc['a']
>>> print(yaml.safe_dump(doc))

我们看到以下输出:

a: &id001
  example: this is a test
b: *id001

您将无法使用标准的Python yaml模块在反序列化/序列化管道中保留这些内容。

© www.soinside.com 2019 - 2024. All rights reserved.