【问题标题】:python, yaml how to parse a string containing apostrophepython,yaml如何解析包含撇号的字符串
【发布时间】:2017-10-08 00:39:01
【问题描述】:

我正在使用 python 来解析 YAML 文件。

其中一个 YAML 文档包含如下字典:

scrapers:
    results: //article[@class='story ']

这显然会导致问题,因为最后一个撇号前面有一个空格。如果我可以删除空格,它将解决问题。但是,由于它是 xpath,我不能。

有谁知道我怎么能逃脱那个序列? 我查看了其他 SO 问题,但解决方案例如将字符串包装在“”中,或者 使用

scrapers:
  results: //article[@class='story ']

scrapers:>
  results: //article[@class='story ']

scrapers:
  results: //article[@class='story '']

没用。

编辑: 我正在尝试打开一个包含上述表达式的文件:

import yaml
with open('/home/depot/wintergreen/yaml/scrapers.yml', 'r') as f:
    scrapers = yaml.load(f)

但是我收到错误: ScannerError:此处不允许映射值

指向story 之后的空格。 我一直在尝试下面的回答者提供的建议,即从 python dict 创建 yaml 表达式。这行得通。我将yaml保存到文件并再次加载它也可以工作。 但是,当我通过键入完全相同的字符来创建 yaml 时,它就不起作用了……

编辑2: 我认为问题源于我在窗口机器上创建了 yaml 文件并将其上传到 unix 服务器上。

【问题讨论】:

  • 有问题的代码在哪里?你用什么图书馆?或者您是否尝试使用正则表达式解析 YAML? (你不应该)

标签: python yaml pyyaml


【解决方案1】:

为结构找到正确的 YAML 格式很容易:在 Python 中创建结构,然后使用 yaml.dump 创建 YAML 编码的字符串:

d = {'scrapers': {'results': "//article[@class='story ']"}}
print d

import yaml
print yaml.dump(d, default_flow_style=False)

其中的结果是:

{'scrapers': {'results': "//article[@class='story '"}}

scrapers:
    results: //article[@class='story ']

这是正确的 YAML 表示,因此如果您遇到问题,则问题出在解析器,而不是输入文本。如果您使用标准的 yaml 库,它应该可以很好地解析。

【讨论】:

  • 对于任何版本的 Python,标准 Python 库中都没有 yaml 解析器。
  • @Chris Johnson 是的,你是对的,它就是这样工作的。我的问题是我一直在尝试编写 yaml(Linux debian 上的 i.m,使用 vim)并使用 import yaml with open('/home/depot/wintergreen/yaml/scrapers.yml', 'r') as f: scrapers = yaml.load(f) 将其加载到 python 笔记本中。在story:ScannerError: mapping values are not allowed here 之后,我收到一个指向空格的错误。我尝试将使用您的方法生成的 yaml 表达式复制粘贴到 vim 中,它仍然抛出相同的错误。可能是编码问题?
  • @Anthon 你在区分库和标准库吗? pip install pyyaml 后跟 import yaml 效果很好。这是一个很常见的选择。
  • @ChrisJohnson pyyaml 尽管报告了许多问题,但至少在过去三年中实际上没有得到维护。因此,我不会像您在回答中那样将其称为“标准 yaml 库”,IMO 将是不恰当的建议。
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2022-12-24
  • 2015-09-09
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多