无法解析 yaml 文件 python
Unable to parse yaml file python
我有一个示例 YAML 文件,但我无法使用 PyYAML 库解析它。
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
,我以为应该是字典。
在您使用第一个 load()
读取流后,流中没有更多数据,下一次加载 returns 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()
(这里确实如此)它不安全并且不会就此向您发出警告.对于不受控制的数据,它可以擦除您的光盘,或者更糟。
我有一个示例 YAML 文件,但我无法使用 PyYAML 库解析它。
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
,我以为应该是字典。
在您使用第一个 load()
读取流后,流中没有更多数据,下一次加载 returns 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()
(这里确实如此)它不安全并且不会就此向您发出警告.对于不受控制的数据,它可以擦除您的光盘,或者更糟。