无新行的YAML转储

2024-05-15 03:29:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我不确定Yaml的规则是否规定新行是必须的,但是我在Yaml序列化字符串中的新行字符有问题。以下是我要做的:

yaml.dump(my_python_dict)

退货:

^{pr2}$

问题是YAML字符串是从Ruby生成的,在到达Python之前,它通过中间脚本语言(MEL)传递。中间语言无法理解Yaml并计算所有“\n”并失败。我想知道有没有办法在没有换行符的情况下丢弃Yaml?我猜这会在加载时引起问题。我现在没有想法,任何建议都会有帮助。在

这是关于如何把事情绑起来的细节。 ruby代码将构建一个Windows命令行并执行它。在

"Mayabatch" -command "source \"C:/cygwin/home/workspace/bpt-maya/src/bd_lay/generate.mel\";generate(\”{SERIALIZED_DICT}\")"
  1. 序列化DICT是需要添加YAML数据的地方。在
  2. 在生成.mel有一个以序列化DICT作为参数的python调用
  3. Mayabatch不支持直接的Python执行,这就是为什么需要包装它。 由于双引号,JSON在这里会失败,这就是我需要其他序列化的原因。在

Tags: 字符串yaml序列化规则my字符dumpdict
1条回答
网友
1楼 · 发布于 2024-05-15 03:29:02

YAML是JSON的一个超级集合。因此,有效的JSON也是有效的YAML(但是有效的YAML不一定是有效的JSON)。在

这一事实可能会让人绕过MEL的YAML解析限制

>>> import yaml
>>> import json

>>> orig_yaml_txt = " -\nasset_data:\n- {assetDefaultScenePath: 'C:\\\\data\\\\my_newfile.ma',\n  assetName: new_asset}\n- {assetDefaultScenePath: 'C:\\\\assetA.ma',\n  assetName: assetA.ma}\naudio_dir: ''\nbg_dir: ''\ndestination: ''\nepisode: '00'\nprod: test\n"
>>> dict_1 = yaml.load(orig_yaml_txt)
>>> intermediate_json_txt = json.dumps(dict_1)
>>> dict_2 = yaml.load(intermediate_json_txt)
>>> dict_1 == dict_2
True

在上面的代码片段中,我获取YAML序列化文本,将其加载到python字典中,然后将其转储到json序列化文本中,然后使用YAML将其加载到python字典中进行解析。在

在您的问题中,您声明原始的YAML是从Ruby生成的。也许,不是转储YAML,您可以从Ruby转储JSON,或者在管道中添加另一个步骤,将YAML转换为JSON,然后再输入到MEL。在

相关问题 更多 >

    热门问题