2013-03-22 4 views
3

я использую PyYAML прочитать файл, питон код:yaml.scanner.ScannerError: при сканировании директивы

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 

Кто-нибудь мне помогает?

ответ

3

Директива должна быть %YAML 1.0 (без двоеточия). Вам также понадобится «начало документа» (---), чтобы отделить ваши директивы от документа. Например:

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

Спасибо, я пытался, но новая проблема заключается в yaml.scanner.ScannerError: при сканировании простого скаляра в «demo.yml», строка 5, колонка 14 нашла неожиданную «:» в «демо .yml ", строка 5, столбец 18 Почему здесь' kernel: {type: LINEAR} 'неверно? –

+0

Вы должны добавить пробел после двоеточия. См. Мое редактирование. –

+1

OpenCV пишет% YAML: 1.0 и нет --- когда он выводит yaml http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html, так что это ошибка opencv? Фактически http://stackoverflow.com/questions/12058510/xml-or-yml-parsing-in-opencv-with-python обращается к этому. –

-1

Это работает для меня:

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

+0

Это дает AttributeError: модуль 'cv' не имеет атрибута 'Load' (используя хотя бы OpenCV 3.1) – StaticX

2

вы можете изменить файл YAML, созданный OpenCV 3,0 file1 из OpenCV:

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

file2:

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-мл-СВМ"
  3. добавить пробел после "типа:" в строке 4

значит, что вы можете использовать yaml.load(filename), для загрузки ваших данных.