2016-07-07 85 views
3

我想從我使用ruamel.yaml加載的YAML文件中獲得註釋字符串。 project documentation缺少API參考,我無法找到相關示例。什麼是正確的方式來訪問評論?如何在Python中使用ruamel.yaml從YAML文件獲取評論?

import ruamel.yaml 

yaml = """\ 
%YAML 1.2 
--- 
# C1 
a: # C2 
    # C3 
    # C4 
    b: 1 # C5 
    c: # A comment here will not be parsed properly by ruamel.yaml v0.11.14 
    - abC# C6 
    - xyz # C7 
    # C8 
# C9 
""" 

loaded = ruamel.yaml.round_trip_load(yaml) 

# Now what? 
+1

這的確還無法有一條線,只有一個鍵,妥善保管評論那。這是沒有API的原因之一,因爲ruamel.yaml應該更完整(包括支持這些不常見的情況,其底層數據結構應該改變)。評論存儲也需要有意義的屬性名稱而不是列表索引(以某種混亂的順序)。 'ruamel.yaml'應該除掉更多的PyYAMLs遺留和評論往返應該也適用於使用基於C的解析器階段。 – Anthon

+1

然後,當然有決定它自己的行的評論是屬於前一個標量還是下一個的問題等 – Anthon

回答

1

an issue on BitBucket關於這個庫的作者的意見(2016年5月9日):

註釋保存還沒有穩定下來,例如如果映射的鍵和值不在同一行上,並且鍵(或鍵和值)都有註釋,我需要做些事情。我最初的目標是保留現有的評論,而不是那麼多操縱。

通過一些試驗,我決定爲上述問題提供的示例代碼以下工作:

print('Comment 1: ' + loaded.ca.comment[1][0].value) 
print('Comment 2: ' + loaded.ca.items['a'][2].value) 
print('Comment 3: ' + loaded.ca.items['a'][3][0].value) 
print('Comment 4: ' + loaded.ca.items['a'][3][1].value) 
print('Comment 5: ' + loaded['a'].ca.items['b'][2].value) 
print('Comment 6: ' + loaded['a']['c'].ca.items[0][0].value) 
print('Comment 7: ' + loaded['a']['c'].ca.items[1][0].value) 
print('Comment 8: ' + loaded['a']['c'].ca.end[0].value) 
print('Comment 9: ' + loaded['a']['c'].ca.end[1].value) 
+0

是的,一般來說,如果你有一個映射/字典對象,你使用'ca .items [鍵]可以獲得與鍵相關的註釋,對於序列/列表類似,您可以使用'ca.items [index]'作爲特定​​的元素。 '_test/test_comment_manipulation.py'中的操作可以進一步提供關於如何設置新評論的一些線索。 – Anthon