从包含特殊字符(星号、符号、*、&)的python dict写入YAML文件

从包含特殊字符(星号、符号、*、&)的python dict写入YAML文件,python,dictionary,yaml,config,pyyaml,Python,Dictionary,Yaml,Config,Pyyaml,我有一个YAML文件,需要导入到python中,以某种方式处理它,然后再次导出为YAML文件。更准确地说,我将YAML配置文件作为dict导入,生成许多带有更改参数的文件,然后再次将它们全部作为YAML文件写入 我面临的问题是,有一些参数前面带有特殊字符$,&例如*target\u size 在python中使用dict时,该参数是字符串格式“*target_size”的字典值。当我写这个dict时,YAML文件格式被保留,即,“*target_size”在生成的YAML文件中被引号包围。我需要

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

我面临的问题是,有一些参数前面带有特殊字符$,&例如*target\u size

在python中使用dict时,该参数是字符串格式“*target_size”的字典值。当我写这个dict时,YAML文件格式被保留,即,“*target_size”在生成的YAML文件中被引号包围。我需要的只是*target_大小,与原始文件中的大小相同

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

写入YAML文件的代码:

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

在YAML中,不带引号的星号*和符号&是特殊字符,表示。这些允许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模块在反序列化/序列化管道中保留这些内容。

在yaml中,不带引号的星号*和符号&是特殊字符,表示。这些允许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模块在反序列化/序列化管道中保存这些内容。

哦,我明白了,现在很清楚了。我会试着用另一种方式做这件事。非常感谢。如果你不希望pyyaml转储程序使用别名和锚,你可以执行Dumper.ignore_aliases=lambda self,data:True,然后再使用转储程序。哦,我明白了,现在已经很清楚了。我会试着用另一种方式做这件事。非常感谢。如果不希望pyyaml转储程序使用别名和锚点,可以在使用转储程序之前执行Dumper.ignore_aliases=lambda self,data:True。