python生成yaml文件_Python实践34-读写yaml文件
關于yaml
YAML語言的設計目標,就是方便人類讀寫。如果你想要實現一些用ini不好做到的配置,可以使用yaml格式作為配置文件
大小寫敏感
使用縮進表示層級關系
縮進時不允許使用Tab鍵,只允許使用空格。
縮進的空格數目不重要,只要相同層級的元素左側對齊即可
yaml數據結構
YAML 支持的數據結構有三種。
對象
鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
對象的一組鍵值對,使用冒號結構表示。
數組
一組按次序排列的值,又稱為序列(sequence) / 列表(list)
一組連詞線開頭的行,構成一個數組。
純量(scalars)
單個的、不可再分的值
包括字符串,布爾值,整數,浮點數,Null,時間,日期
一個yaml文件
name: John Smith
age: 37
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name: Jenny Smith
age: 12
和它對應的json文件如下:
{ name: 'John Smith',
age: 37,
spouse: { name: 'Jane Smith', age: 25 },
children:
[ { name: 'Jimmy Smith', age: 15 },
{ name: 'Jenny Smith', age: 12 } ]
}
讀寫yaml文件
import yaml
if __name__ == "__main__":
with open('father.yml') as f:
content = yaml.load(f)
# output:
print(type(content))
print(content)
content.update({'age': 38})
print(content)
with open('PyYAML.yml', 'w') as nf:
yaml.dump(content, nf)
生成的新yaml文件形式如下:
age: 38
children:
- {age: 15, name: Jimmy Smith}
- {age: 12, name: Jenny Smith}
name: John Smith
spouse: {age: 25, name: Jane Smith}
仔細一看,跟原yaml文件不像嘛,尤其是幾個大括號,很刺眼,這可怎么辦?
使用ruamel.yaml代替PyYAML
解決方法就是使用ruamel.yaml代替PyYAML,因為PyYAML貌似已經不再維護了
安裝:pip install ruamel.yaml
使用ruamel.yaml庫里面函數參數Loader=ruamel.yaml.RoundTripLoader和Dumper=ruamel.yaml.RoundTripDumper可以用來保持新生成的yaml文件的表現和輸入文件一致。代碼如下:
from ruamel import yaml
if __name__ == "__main__":
with open('father.yml') as f:
content = yaml.load(f, Loader=yaml.RoundTripLoader)
# output:
print(type(content))
print(content)
content.update({'age': 38})
print(content)
with open('ruamel.yml', 'w') as nf:
yaml.dump(content, nf, Dumper=yaml.RoundTripDumper)
生成新的yaml文件形式如下,正是我們期望的格式:
name: John Smith
age: 38
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name: Jenny Smith
age: 12
代碼下載
本文代碼已經歸檔到github,您可以訪問下面的鏈接獲得,歡迎star該代碼倉庫。
代碼地址
總結
以上是生活随笔為你收集整理的python生成yaml文件_Python实践34-读写yaml文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库有哪些设计技巧
- 下一篇: 2d unity 多物体 射线_[蛮牛驿