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

问题描述:

我正在使用python来解析YAML文件。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字典创建yaml表达式。这工作。我保存yaml文件并将其重新加载回来,它也可以工作。 然而,当我键入完全相同的人物创建YAML,那么它不工作...

EDIT2: 我觉得这个问题从我创建了一个窗口机上的YAML文件中,并上传它基于这样的事实在unix服务器上。

+0

问题在哪里呢?你使用什么库?还是你想用正则表达式来解析YAML? (你不应该) – Anthon

可以很容易地找到一个结构正确的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库,它应该解析得很好。

+0

标准Python库中没有任何版本的Python的yaml解析器。 – Anthon

+0

@Chris Johnson是的,你是对的,它就像那样。我的问题是,我一直在尝试使用'import yaml with open('/ home/depot/wintergreen/yaml/scrapers.yml')来编写yaml(在linux debian上使用vim)并将其加载到python笔记本中','r')为f: scrapers = yaml.load(f)'。在那里我收到一个错误,指出'story'后面的空白:'ScannerError:映射值在这里是不允许的。我试图将用你的方法生成的yaml表达式粘贴到vim中,并且它仍然抛出相同的错误。也许它是一个编码问题? –

+0

@Anthon你是否区分了图书馆和标准图书馆? 'pip install pyyaml'后面跟'import yaml'运行良好。这是一个非常普遍的选择。 –