使用 PyYAML 和 Python 的 YAML
Posted
技术标签:
【中文标题】使用 PyYAML 和 Python 的 YAML【英文标题】:YAML with Python using PyYAML 【发布时间】:2015-10-23 15:57:06 【问题描述】:我正在尝试遵循这两个示例:
Parsing a YAML file in Python, and accessing the data?
YAML parsing and Python?
但由于某种原因,我不断收到以下错误消息:
Traceback (most recent call last):
File "test.py", line 3, in <module>
doc = yaml.load(f)
File "/usr/local/lib/python2.7/dist-packages/yaml/__init__.py", line 71, in load
return loader.get_single_data()
File "/usr/local/lib/python2.7/dist-packages/yaml/constructor.py", line 37, in get_single_data
node = self.get_single_node()
File "/usr/local/lib/python2.7/dist-packages/yaml/composer.py", line 36, in get_single_node
document = self.compose_document()
File "/usr/local/lib/python2.7/dist-packages/yaml/composer.py", line 55, in compose_document
node = self.compose_node(None, None)
File "/usr/local/lib/python2.7/dist-packages/yaml/composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
File "/usr/local/lib/python2.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
item_value = self.compose_node(node, item_key)
File "/usr/local/lib/python2.7/dist-packages/yaml/composer.py", line 64, in compose_node
if self.check_event(AliasEvent):
File "/usr/local/lib/python2.7/dist-packages/yaml/parser.py", line 98, in check_event
self.current_event = self.state()
File "/usr/local/lib/python2.7/dist-packages/yaml/parser.py", line 449, in parse_block_mapping_value
if not self.check_token(KeyToken, ValueToken, BlockEndToken):
File "/usr/local/lib/python2.7/dist-packages/yaml/scanner.py", line 116, in check_token
self.fetch_more_tokens()
File "/usr/local/lib/python2.7/dist-packages/yaml/scanner.py", line 257, in fetch_more_tokens
% ch.encode('utf-8'), self.get_mark())
yaml.scanner.ScannerError: while scanning for the next token
found character '\t' that cannot start any token
in "tree.yaml", line 2, column 1
我通过执行以下操作安装了 PyYAML:
python setup.py install
我也测试过:
python setup.py test
似乎还可以。
现在我承认我对 Python 和 YAML 有点陌生,但我已经按照这两个链接找到了这封信。我有一个名为 tree.yaml 的文件和一个名为 test.py 的文件,每个文件都包含以下内容:
test.py
import yaml
with open('tree.yaml', 'r') as f:
doc = yaml.load(f)
txt = doc["treeroot"]["branch1"]
print txt
tree.yaml
treeroot:
branch1: branch1 text
branch2: branch2 text
在你问之前,是的,我验证了我的选项卡空间,并通过验证器运行了 YAML 文件。知道为什么这不起作用吗?似乎它无法与 PyYAML 进行通信。再说一次,我对这一切都很陌生,所以我还不明白它是如何工作的以及一切是如何集成的。
感谢您的帮助!
我今天要回家了,所以会离开电脑一会儿。将很快回来或将尝试通过电话回复/回答任何问题。
谢谢
【问题讨论】:
【参考方案1】:Yaml 文件使用空格,而不是制表符作为缩进。在您提供的错误中,清楚地表明第二行中的第一个字符是 tab。请用 2 或 4 个空格替换它,它应该可以工作。
yaml 中不允许使用选项卡,因为不同的编辑器和工具会以不同的方式处理它们。为了避免这种混淆,您应该使用空格。
【讨论】:
哈哈哇,我完全误解了 YAML。我现在真的觉得自己很傻。将更改并再试一次。谢谢以上是关于使用 PyYAML 和 Python 的 YAML的主要内容,如果未能解决你的问题,请参考以下文章
使用 PyYaml 将 Python 字典转换为 yaml 文档