gpt4 book ai didi

python - 和有什么区别!和 !!在 yaml 中?

转载 作者:太空狗 更新时间:2023-10-30 01:16:07 27 4
gpt4 key购买 nike

我正在尝试加载如下所示的 YAML:

dist: !!opencv-matrix
rows: 380
cols: 380
dt: f
data: [ 0., 0., -1.88644529e+18, 2.45423365e+00, 11698176.,
2.03862047e+00, -8.85501460e+10, 2.54738545e+00, 1.71208843e+20,
...
2.44447327e+00 ]

加载代码就是:

import yaml
y = yaml.load(s)

其中 s 是加载到字符串中的 YAML。

我收到这个错误:

yaml.constructor.ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:opencv-matrix'
in "<string>", line 382, column 7:
dist: !!opencv-matrix

这很公平,所以我为该标记添加了构造函数:

def opencv_matrix(loader, node):
mapping = loader.construct_mapping(node)
mat = np.array(mapping["data"])
mat.resize(mapping["rows"], mapping["cols"])
return mat

yaml.add_constructor(u"!!opencv-matrix", opencv_matrix)
y = yaml.load(s)

我仍然得到错误。但是,如果我用 !opencv_matrix 替换 !!opencv_matrix,那么一切正常。

这是怎么回事?

最佳答案

!!opencv-matrix 这样的二级标签实际上是 tag:yaml.org,2002:opencv-matrix 的简写(在 reference card 中提到)。看起来 PyYAML 的 add_constructor 方法没有正确处理这个速记符号。

这可能是一个错误,具体取决于二级标签的解释方式(请参阅下面的第二部分)。我已经提交了错误报告 here ,希望它能得到解决。

!opencv-matrix 这样的主标签是明确定义的,加载在 PyYAML 中似乎没有任何问题。

如果您在 add_constructor 中将 !!opencv-matrix 替换为 tag:yaml.org,2002:opencv-matrix > 打电话。


至于最初的问题,AFAIK 主标签 (!) 用于用户定义的类型,而辅助标签 (!!) 用于表示标准语言-独立类型 defined here (因此格式又长又花哨)。

如果这是 OpenCV 生成的文件,那么如果将这些标签更改为应用程序中的主要标签,可能会更简单。

关于python - 和有什么区别!和 !!在 yaml 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15964056/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com