YAML 与 Python 使用 PyYAML

YAML with Python using PyYAML

我正在尝试遵循以下两个示例:

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

看起来还可以。

Now g运行ted 我对 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

在你问之前,是的,我验证了我的选项卡 space 并且我通过验证器 运行 YAML 文件。知道为什么这不起作用吗?似乎它无法与 PyYAML 通信。同样,我对所有这一切都很陌生,所以我还不明白它是如何工作的以及所有东西是如何集成的。

感谢您的帮助!

今天我要回家,所以会离开电脑一会儿。将很快回来查看或将尝试通过 phone.

reply/answer 任何问题

谢谢

Yaml 文件使用空格而不是制表符作为缩进。在您提供的错误中,它清楚地表明第二行中的第一个字符是 tab。请将其替换为 2 或 4 个空格,它应该可以工作。

yaml 中不允许使用制表符,因为不同的编辑器和工具对它们的处理方式不同。为了避免这种混淆,您应该使用空格。