Python使用YAML

栏目: Python · 发布时间: 6年前

内容简介:我们知道YAML比JSON更适合于作为配置文件,因为YAML更适合人阅读与编辑,而JSON更适合程序处理。当我们希望在Web界面上编辑配置文件的时候,可以找到前端YAML编辑器插件来实现更好的编辑体验。在后端数据库中,我们应该将YAML转化成JSON在入库,因为JSON更适合后端数据操作。

我们知道YAML比JSON更适合于作为配置文件,因为YAML更适合人阅读与编辑,而JSON更适合程序处理。

当我们希望在Web界面上编辑配置文件的时候,可以找到前端YAML编辑器插件来实现更好的编辑体验。

在后端数据库中,我们应该将YAML转化成JSON在入库,因为JSON更适合后端数据操作。

我们可以为 python 安装PyYAML库,实现YAML的序列化/反序列化,并且实现和JSON之间的互相转换: https://pypi.org/project/PyYAML/

反序列化YAML

假设YAML如下:

kind: Service
apiVersion: v1
metadata:
  name: myservice
spec:
  selector:
    app: myservice
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

然后可以这样解析它:

import yaml
 
input = """
kind: Service
apiVersion: v1
metadata:
  name: myservice
spec:
  selector:
    app: myservice
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
"""
 
a = yaml.safe_load(input)
print(a)

YAML已被解析为python的字典:

{'kind': 'Service', 'apiVersion': 'v1', 'metadata': {'name': 'myservice'}, 'spec': {'selector': {'app': 'myservice'}, 'ports': [{'protocol': 'TCP', 'port': 80, 'targetPort': 80}]}}

序列化YAML

然后可以再把它变回YAML:

import yaml
 
input = """
kind: Service
apiVersion: v1
metadata:
  name: myservice
spec:
  selector:
    app: myservice
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
"""
 
a = yaml.safe_load(input)
b = yaml.safe_dump(a)
print(b)

输出如下:

apiVersion: v1
kind: Service
metadata: {name: myservice}
spec:
  ports:
  - {port: 80, protocol: TCP, targetPort: 80}
  selector: {app: myservice}

YAML转JSON

因为是python字典,也可以序列化为json:

import yaml
import json
 
input = """
kind: Service
apiVersion: v1
metadata:
  name: myservice
spec:
  selector:
    app: myservice
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
"""
 
a = yaml.safe_load(input)
b = json.dumps(a)
print(b)

输出如下:

{"kind": "Service", "apiVersion": "v1", "metadata": {"name": "myservice"}, "spec": {"selector": {"app": "myservice"}, "ports": [{"protocol": "TCP", "port": 80, "targetPort": 80}]}}

序列化/反序列化多个YAML

import yaml
import json
 
input = """
kind: Service
apiVersion: v1
metadata:
  name: myservice
spec:
  selector:
    app: myservice
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: yourservice
spec:
  selector:
    app: yourservice
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---
"""
 
a = yaml.safe_load_all(input)
a = list(a)
 
b = yaml.safe_dump_all(a)
print(b)

输出:

apiVersion: v1
kind: Service
metadata: {name: myservice}
spec:
  ports:
  - {port: 80, protocol: TCP, targetPort: 80}
  selector: {app: myservice}
---
apiVersion: v1
kind: Service
metadata: {name: yourservice}
spec:
  ports:
  - {port: 80, protocol: TCP, targetPort: 80}
  selector: {app: yourservice}
--- null
...

博主无私的分享着知识,你愿意送他一顿热腾腾的早餐吗?

Python使用YAML

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

用户思维+:好产品让用户为自己尖叫

用户思维+:好产品让用户为自己尖叫

[美] Kathy Sierra / 石航 / 人民邮电出版社 / 2017-9 / 69.00元

畅销产品与普通产品的本质区别是什么?若没有巨额预算、不爱营销噱头、不开奢华的产品发布会,如何打造可持续成功的产品?本书针对上述问题提出了新颖的观点:用户并不关心产品本身有多棒,而是关心使用产品时自己有多棒。作者利用其多年的交互设计经验,生动阐释了这一观点背后的科学。可贵的是,本书并不止步于解释“为什么”,还清晰呈现了“怎么做”。 本书风格活泼、图文并茂,其对话式内容既引人入胜,又引人深思,适......一起来看看 《用户思维+:好产品让用户为自己尖叫》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具