Python 无法添加列表成员

Python 无法添加列表成员,python,yaml,ruamel.yaml,Python,Yaml,Ruamel.yaml,我正在尝试添加新的列表成员,但没有成功 这就是我所拥有的: 导入系统 从ruamel.yaml导入yaml 从ruamel.yaml.comments导入CommentedMap作为cm 从ruamel.yaml.comments导入CommentedSeq作为cs yaml_doc=”“”\ 条件: 比如: -!Join[“”,['abc:def:',!Ref'XYZ::Rert',':','123',':tty:']] """ yaml=yaml() yaml.preserve_quotes

我正在尝试添加新的列表成员,但没有成功

这就是我所拥有的:

导入系统 从ruamel.yaml导入yaml 从ruamel.yaml.comments导入CommentedMap作为cm 从ruamel.yaml.comments导入CommentedSeq作为cs yaml_doc=”“”\ 条件: 比如: -!Join[“”,['abc:def:',!Ref'XYZ::Rert',':','123',':tty:']] """ yaml=yaml() yaml.preserve_quotes=True yaml.width=4096 数据=yaml.load(yaml\U文件) ref=数据['Condition']['Like'] 新成员=“!Join[”、['abc:def:'、!Ref'XYZ::Rert'、':'、'456'、':tty:']] #新成员2='!加入[“”,['abc:def:',!Ref'XYZ::Rert',':','456',':tty:']' ref.append(新成员) #参考附录(新成员2) yaml.dump(数据,系统标准输出) 输出是

Condition:
  Like:
  - !Join ['', ['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]
  - "!Join ['',['abc:def:', !Ref 'XYZ::Rert', ':', '456', ':tty:*']]"
我不想要双引号

如果我取消注释与新成员2相关的部分,我会得到一个错误

文件“ec2-recover-2.py”,第18行
新成员2='!加入[“”,['abc:def:',!Ref'XYZ::Rert',':','456',':tty:']'
^
SyntaxError:无效语法

如何以这种格式添加成员列表
!加入['',['abc:def:',!Ref'XYZ::Rert',':','123',':tty:']
并且它在最后的YAML中没有单引号或双引号?

您似乎认为:

!Join ['',['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]
是在Python中作为字符串加载的普通标量。事实并非如此。A. 普通标量不能以感叹号开头,因为YAML使用感叹号 介绍一个, 从那里加载的是一个非常复杂的对象:

import ruamel.yaml

yaml = ruamel.yaml.YAML()
data = yaml.load("!Join ['',['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]")
print(data)
印刷品:

['', ['abc:def:', <ruamel.yaml.comments.TaggedScalar object at 0x7f405265fa58>, ':', '123', ':tty:*']]
其中:

Condition:
  Like:
  - !Join ['', ['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]
  - !Join ['', ['abc:def:', !Ref 'XYZ::Rert', ':', '456', ':tty:*']]
  - !Join ['', ['abc:def:', !Ref 'XYZ::Rert', ':', '789', ':tty:*']]
(如果你真的想弄清楚如何构建像
new\u member2
这样的东西,它会很有帮助 要从YAML加载所需的输出并打印各个项目及其类型和
它们的属性)

您似乎认为:

!Join ['',['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]
是在Python中作为字符串加载的普通标量。事实并非如此。A. 普通标量不能以感叹号开头,因为YAML使用感叹号 介绍一个, 从那里加载的是一个非常复杂的对象:

import ruamel.yaml

yaml = ruamel.yaml.YAML()
data = yaml.load("!Join ['',['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]")
print(data)
印刷品:

['', ['abc:def:', <ruamel.yaml.comments.TaggedScalar object at 0x7f405265fa58>, ':', '123', ':tty:*']]
其中:

Condition:
  Like:
  - !Join ['', ['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]
  - !Join ['', ['abc:def:', !Ref 'XYZ::Rert', ':', '456', ':tty:*']]
  - !Join ['', ['abc:def:', !Ref 'XYZ::Rert', ':', '789', ':tty:*']]
(如果你真的想弄清楚如何构建像
new\u member2
这样的东西,它会很有帮助 要从YAML加载所需的输出并打印各个项目及其类型和
它们的属性)

yaml.preserve\u quotes=True
可能是造成这种情况的原因。尝试将其设置为非原因的
False
@rdas,并应将其设置为
True
,否则,大约
:tty:
中的伪单引号将从输出中删除。我需要
yaml.preserve\u quotes=True
标志,因为我需要它用于文件的其他部分,而我在我的示例中没有显示
yaml.preserve\u quotes=True
可能是造成这种情况的原因。尝试将其设置为非原因的
False
@rdas,并应将其设置为
True
,否则,
:tty:
中的伪单引号将从输出中删除。我需要
yaml.preserve_quotes=True
标志,因为我需要它用于文件的其他部分,而我在示例中没有显示它。它工作得很好。感谢所有提供的帮助@AnthonIt工作得非常好。感谢@Anthon提供的所有帮助