python,yaml如何解析包含撇号的字符串

时间:2017-10-08 00:39:01

标签: python yaml pyyaml

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

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

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

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

任何人都知道如何逃脱这个序列? 我查看了其他问题,但解决方法就像将字符串包装在""或者 使用

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时,它不起作用...

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

1 个答案:

答案 0 :(得分: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库,它应该解析正常。