Roh*_*ith 6 pyyaml python-3.x ruamel.yaml
我无法找到将 YAML 转储到 ruamel.yaml 中的变量的方法。使用 PyYAML,我可以实现如下所示的相同效果:
with open('oldPipeline.yml','r') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
a = yaml.dump(data)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试同样的操作时ruamel.yaml,它会抛出异常TypeError: Need a stream argument when not dumping from context manager
该错误清楚地表明您应该提供一个流,因此您应该这样做:
import io
import ruamel.yaml
yaml_str = b"""\
fact: The recommended YAML file extension has been .yaml since September 2006
origin: yaml.org FAQ
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
buf = io.BytesIO()
yaml.dump(data, buf)
assert buf.getvalue() == yaml_str
Run Code Online (Sandbox Code Playgroud)
这不会给出断言错误。
ruamel.yaml 和 PyYAML 使用流接口,很少需要将其写入缓冲区,并且应该避免,因为它效率低下,特别是在常见的 PyYAML 形式中:
print(yaml.dump(data)) # inefficient wrt time and space
Run Code Online (Sandbox Code Playgroud)
而不是更合适的
yaml.dump(data, sys.stdout)
Run Code Online (Sandbox Code Playgroud)
输出的后处理最好在类似流的对象中完成,或者使用
文档的基本用法transform部分中描述的选项。
这里有进一步的解释,当然你也可以查看 PyYAML 是如何做到这一点的。
| 归档时间: |
|
| 查看次数: |
7240 次 |
| 最近记录: |