【问题标题】:yaml.scanner.ScannerError: while scanning a directiveyaml.scanner.ScannerError:扫描指令时
【发布时间】:2013-03-12 08:33:27
【问题描述】:

我使用PyYAML读取文件,python代码为:

with open('demo.yml') as f:
    dataMap = yaml.load(f)

demo.yml:

%YAML:1.0
my_svm: !!opencv-ml-svm
  svm_type: C_SVC
  kernel: { type:LINEAR }
  C: 1.

那么错误是:

yaml.scanner.ScannerError: while scanning a directive
  in "demo.yml", line 1, column 1
expected alphabetic or numeric character, but found ':'
  in "demo.yml", line 1, column 6

有人帮帮我吗?

【问题讨论】:

    标签: yaml pyyaml


    【解决方案1】:

    可以修改opencv 3.0创建的yaml文件 来自opencv的文件1:

    1 %YAML:1.0
    2 my_svm: !!opencv-ml-svm
    3   svm_type: C_SVC
    4   kernel: { type:LINEAR }
    5   C: 1.
    6 ...
    

    文件2:

    1 my_svm: opencv-ml-svm
    2   svm_type: C_SVC
    3   kernel: { type: LINEAR }
    4   C: 1.
    5 ...
    

    文件1 -> 文件2:

    1. 删除第 1 行
    2. 删除“!!opencv-ml-svm”
    3. 在第 4 行的“type:”之后添加空格

    那么您可以使用yaml.load(filename) 来加载您的数据。

    【讨论】:

      【解决方案2】:

      这对我有用:

      from cv2 import cv
      import numpy as np
      
      filepath = "test.yml"
      matrixA = np.array( cv.Load(filepath, cv.CreateMemStorage(), "matrixA") )
      matrixB = np.array( cv.Load(filepath, cv.CreateMemStorage(), "matrixB") )
      print "matrixA:", matrixA
      print "matrixB:", matrixB
      

      如下所示: http://xudongai.blogspot.jp/2013/08/how-to-use-python-to-load-opencv-yml.html

      【讨论】:

      • 这给出了 AttributeError: module 'cv' has no attribute 'Load' (至少使用 OpenCV 3.1)
      【解决方案3】:

      指令应该是%YAML 1.0(没有冒号)。您还需要一个“文档开始”(---)来将您的指令与文档分开。例如:

      %YAML 1.0
      ---
      my_svm: !!opencv-ml-svm
        svm_type: C_SVC
        kernel: { type: LINEAR }
        C: 1.
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多