我想解析YAML文件,如下面的加載文檔作爲YAML原始字符串與PyYAML
meta-info-1: val1
meta-info-2: val2
---
Plain text/markdown content!
jhaha
如果我load_all
這與PyYAML,我得到以下
>>> list(yaml.load_all(open('index.yml')))
[{'meta-info-1': 'val1', 'meta-info-2': 'val2'}, 'Plain text/markdown content! jhaha']
我試圖在這裏實現的是yaml文件應該包含兩個文檔,第二個文檔應該被解釋爲單個字符串文檔,更具體地說是任何大量帶有降格格式的文本。我不希望它被解析爲YAML語法。
在上例中,PyYAML將第二個文檔作爲單個字符串返回。但是,如果第二個文檔具有:
字符而不是!
,則會出現語法錯誤。這是因爲PyYAML正在解析該文檔中的內容。
有沒有一種方法可以告訴PyYAML第二個文檔只是一個原始字符串,而不是解析它?
編輯:有一些很好的答案。儘管使用引號或文字語法解決了上述問題,但我希望用戶能夠在不添加任何額外的內容的情況下編寫純文本。只有三個-
(或.
's)並且寫下了大量純文本。其中也可能包括引號。所以,我想知道我是否可以告訴PyYAML只解析一個文檔,並將第二個文檔給我。
Eidt 2:那麼,調整AGF的想法,而不是使用try /除第二文檔可以是有效的YAML語法,
config_content, body_content = open(filename).read().split('\n---')
config = yaml.loads(config_content)
body = yaml.loads(body_content)
感謝AGF。
您的文檔無效YAML –
我知道。我不打算在第二份文件中寫出有效的yaml。我希望它作爲一個原始的字符串內容閱讀,解析爲yaml。 –