Python 没有新生产线的Yaml转储

Python 没有新生产线的Yaml转储,python,yaml,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: as

我不确定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}\")" 序列化DICT是需要添加YAML数据的地方。 generate.mel有一个以序列化DICT为参数的python调用 Mayabatch不支持直接Python执行,因此需要对其进行包装。 由于双引号,JSON将在这里失败,这就是我需要其他序列化的原因。
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生成的。也许,您可以从Ruby中转储JSON,而不是转储YAML,或者在管道中添加另一个步骤,将YAML转换为JSON,然后再发送给MEL。

尝试修复转储:YAML.dumpmy_python_dict.replace'\n',''-但我想这会破坏YAML语法,所以您真的应该让MEL fixedMEL无法处理包含新行的字符串?如何编写MEL脚本听起来像是个问题。但是由于需要换行符,您可以用perl对yaml进行base64编码,然后用python再次解码。如果删除换行符,yaml将不再解析。您可以考虑对文档Base64进行编码吗?在穿过你的破房子之前?我尝试了base64,但字符串似乎仍然有换行符。如果Mel有一些原始字符串的概念,这不会是一个问题。是否还有其他类似于YAML的使用单引号的编码?这是我第一次尝试,但传递JSON有不同的复杂性。因为数据是通过命令行解析的,所以我需要使用转义序列来处理双引号。这就是为什么我需要使用单引号的序列化。我希望这是有意义的。你说通过命令行传递是什么意思?您是否介意更新您的问题,说明您的数据是如何通过命令行传递的。此外,您也可以将json/yaml写入一个文件,并在程序的下一阶段从文件中读取,而不是通过命令行传递数据。我知道我可以传递文件,我就是这么做的:但这并不理想。