【问题标题】:How to serialize escaped strings in a list如何序列化列表中的转义字符串
【发布时间】:2019-11-19 04:50:59
【问题描述】:

我正在尝试为 AWS 编写 .yml 策略文档。问题是当我尝试自己转义时,我的字符串列表被双引号 "" 包围,即
- “'acm:AddTagsToCertificate'”。

当我什么都不做时,它显示为
- acm:AddTagsToCertificate。

问题是我需要 .yml 中的最终结果看起来像
- 'acm:AddTagsToCertificate'

就我自己的故障排除而言,我尝试过使用双引号和单引号。我还尝试对列表进行子类化以覆盖列表的序列化方式,直到其他 SO 答案表示不赞成。

这是显示我的问题的简化代码

import yaml;

data = {'apigateway:CreateDeployment': 6}

actions = [];

for key in data:
  key = "\'" + key + "\'"
  print(key)
  actions.append(key);

with open('test.yml', 'w') as output:
  yaml.dump(actions, output, default_flow_style=False)

【问题讨论】:

  • 不是你的问题,但 Python 不需要 ;。它只是用来在一行上做语句。
  • 是的,这只是因为我的代码与需要分号的语言保持一致。个人习惯
  • 你确定你真的需要'而不是"吗?目标系统是否抱怨? yaml 中的字符串都不需要...如果它们不包含特殊内容或看起来像数字/日期...而您的则不需要。,
  • @PatrickArtner 不知道。我正在使用我的工作已经使用的模板,以匹配它们的格式。我会尝试在没有引号的情况下进行验证,看看会发生什么。
  • 我在阅读您的评论时注意到的一件事是第一个结果的问题是它同时具有双引号和单引号。我需要一个或另一个,而不是两者。 Single 是首选,因为这是当前工作中使用的样式。我确实在没有任何引用的情况下尝试过,结果到目前为止有效。

标签: python-3.x list serialization pyyaml


【解决方案1】:

dump 中使用default_style="'"

import yaml

data = {'apigateway:CreateDeployment': 6}

actions = list(data.keys())

with open('test.yml', 'w') as output:
  yaml.dump(actions, output, default_flow_style=False, default_style="'")

【讨论】:

  • 这确实让我更接近我正在寻找的格式,并且确实解决了引用问题。非常感谢!
  • 如果它解决了这个问题,别忘了把它标记为答案:)
  • 有趣的是,它解决了简单的示例,但引入了格式化实际人类可读的 cloudformation 模板的问题。您是否了解图书馆内究竟发生了什么导致问题?我想我只是不明白图书馆是如何进行格式化的。我之前尝试过查看文档并发现它需要。
  • 云形成不是完全有效的 YAML(至少在需要这种类型的格式时不是)。 yaml 模块是为 YAML 设计的,非常适合这种情况,但如果您尝试符合云形成模板语义,那么您将需要陪审团装配一些东西。
  • 话虽如此,您确定需要单引号吗? This question doesn't use them.
猜你喜欢
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多