2017-10-08 119 views
0

我正在使用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

回答

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庫,它應該解析得很好。

+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'運行良好。這是一個非常普遍的選擇。 –

相關問題