您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 有什么区别!和!!在yaml?

5b51 2022/1/14 8:20:48 python 字数 4220 阅读 485 来源 www.jb51.cc/python

我正在尝试加载看起来像这样的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

概述

我正在尝试加载看起来像这样的YAML:

@H_403_6@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 ]

加载代码只是:

@H_403_6@import yaml
y = yaml.load(s)

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

我收到此错误

@H_403_6@yaml.constructor.ConstructorError: Could not determine a constructor for the tag 'tag:yaml.org,2002:opencv-matrix'
  in "
 

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

@H_403_6@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,那么一切正常.

这里发生了什么?

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

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

如果你使用标签:yaml.org,2002:opencv-matrix在add_constructor调用中替换!! opencv-matrix,它对我有用.

至于原始问题,AFAIK主标签(!)用于用户定义类型,而辅助标签(!!)用于表示与标准语言无关的类型defined here(因此是长而奇特的格式).

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

总结

以上是编程之家为你收集整理的python – 有什么区别!和!!在yaml?全部内容,希望文章能够帮你解决python – 有什么区别!和!!在yaml?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶