我想讀取一個YAML文件並按照它在文件中的順序打印出列表中的列表。通過python中的YAML列表迭代
所以YAML:
b: ...
a: ...
我的蟒蛇是:
for key, value in yaml.load(open(input_file)).items():
print(str(key))
輸出變爲:
a
b
但是我需要它是b
然後a
。我也試過iteritems()
,我得到了同樣的結果。
我想讀取一個YAML文件並按照它在文件中的順序打印出列表中的列表。通過python中的YAML列表迭代
所以YAML:
b: ...
a: ...
我的蟒蛇是:
for key, value in yaml.load(open(input_file)).items():
print(str(key))
輸出變爲:
a
b
但是我需要它是b
然後a
。我也試過iteritems()
,我得到了同樣的結果。
如果你的YAML文件包含:
b: 2
a: 1
然後分析是這樣的:
from ruamel.yaml import YAML
yaml = YAML()
input_file = 'input.yaml'
for key, value in yaml.load(open(input_file)).items():
print(str(key))
將打印b
第一。如果您使用(更快):
yaml = YAML(typ='safe')
這不能保證,因爲YAML規範不保證映射鍵的順序。
如果您正在使用YAML 1.1和PyYAML,有秩序沒有這樣的保證,但你不應該使用在首位yaml.load()
,因爲它是不安全的。
謝謝,這很有道理。我需要仔細研究一下YAML以便弄清楚這個問題,但是謝謝你指出我正確的方向:) – Rikg09
yaml.load
在這種情況下只返回一個dict
,默認情況下它是無序的。如果您關心維護訂單,則需要使用OrderedDict
,請參閱here以瞭解如何執行此操作的示例。
爲什麼你要做'print(str(key))',這是否給出了與'print(key)'不同的結果? – Anthon
如果你的YAML在'a'之前確實有一個空格,而不是在'b'之前,那麼它是無效的YAML。但是因爲在你的輸出中,空間神奇地出現在'b'之前,我認爲這是一個格式錯誤。 – Anthon