2017-06-16 92 views
0

我有一個示例YAML文件,我無法使用PyYAML庫解析它。無法解析yaml文件python

setup.yml

key: HostName 
deviceid: port1 

Python代碼

with open('../configs/setup.yml') as stream: 
    try: 
     print 'yaml.data ==', yaml.load(stream) 
     print 'yaml.data ==', type(yaml.load(stream)) 
     # print 'yaml.data ==', dict(yaml.load(stream)) 
     data = yaml.safe_load(stream) 
     self.device_id = data['deviceid'] 
     self.key = yaml.load(stream)['key'] 
    except yaml.YAMLError as exc: 
     print(exc) 

yaml.load(stream)類型是Nonetype,我認爲這應該是一本字典。

回答

0

在閱讀與第一load()沒有更多的數據流中,下一個負載返回None並不會引發錯誤(如流的末尾)..

你可以做的流是:

import yaml 

with open('../configs/setup.yml') as stream: 
    print 'yaml.data ==', yaml.load(stream) 
    stream.seek(0, 0) 
    print 'yaml.data ==', type(yaml.load(stream)) 
    # print 'yaml.data ==', dict(yaml.load(stream)) 
with open('../configs/setup.yml') as stream: 
    data = yaml.safe_load(stream) 
    device_id = data['deviceid'] 
    key = data['key'] 

或者只是將裝入的文檔從開始存儲到數據中。由於之前的錯誤,我刪除了對self.的引用,因此您從未來過那個未定義的變量。

但是,幾乎沒有必要使用PyYAML的load()(這肯定是真的在這裏)它是不安全的,不警告你。如果數據不受控制,可能會擦除光盤,或者更糟。