没有换行的Yaml转储

时间:2015-03-25 17:07:29

标签: python yaml

我不确定Yaml的规则是否必须指定新行,但是我遇到了Yaml序列化字符串中新行字符的问题。这是我想要做的:

yaml.dump(my_python_dict)

返回:


"---\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"

问题是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. SERIALIZED DICT 是需要添加YAML数据的地方。
  2. generate.mel 以SERIALIZED DICT作为参数进行python调用
  3. Mayabatch不支持直接Python执行,这就是它需要被包装的原因。 由于双引号,JSON将在这里失败,这就是我需要其他序列化的原因。

1 个答案:

答案 0 :(得分:0)

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。