我无法找到将YAML转储到ruamel.yaml中的变量的方法;使用PyYAML,我可以实现如下所示:
with open('oldPipeline.yml','r') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
a = yaml.dump(data)
但是当我对ruamel.yaml尝试相同时,它会引发TypeError异常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
没有断言错误。
ruamel.yaml和PyYAML使用流接口,并将其写入缓冲区是几乎没有必要,并且由于效率低下而应避免使用,尤其是以常见的PyYAML形式:
print(yaml.dump(data)) # inefficient wrt time and space
而不是更合适的
yaml.dump(data, sys.stdout)
输出的后处理最好在类似对象,或使用transform
中描述的Basic
Usage选项文档部分。
进一步解释here,当然您也可以查找了PyYAML如何做到这一点。