2017-08-02 172 views
0

我想讀取一個YAML文件並按照它在文件中的順序打印出列表中的列表。通過python中的YAML列表迭代

所以YAML:

b: ... 
a: ... 

我的蟒蛇是:

for key, value in yaml.load(open(input_file)).items(): 
    print(str(key)) 

輸出變爲:

a 
b 

但是我需要它是b然後a。我也試過iteritems(),我得到了同樣的結果。

+0

爲什麼你要做'print(str(key))',這是否給出了與'print(key)'不同的結果? – Anthon

+0

如果你的YAML在'a'之前確實有一個空格,而不是在'b'之前,那麼它是無效的YAML。但是因爲在你的輸出中,空間神奇地出現在'b'之前,我認爲這是一個格式錯誤。 – Anthon

回答

0

如果你的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(),因爲它是不安全的。

+0

謝謝,這很有道理。我需要仔細研究一下YAML以便弄清楚這個問題,但是謝謝你指出我正確的方向:) – Rikg09

0

yaml.load在這種情況下只返回一個dict,默認情況下它是無序的。如果您關心維護訂單,則需要使用OrderedDict,請參閱here以瞭解如何執行此操作的示例。