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

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

查看所有标签

猜你喜欢:

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

The Web Designer's Idea Book, Vol. 2

The Web Designer's Idea Book, Vol. 2

Patrick McNeil / How / 2010-9-19 / USD 30.00

Web Design Inspiration at a Glance Volume 2 of The Web Designer's Idea Book includes more than 650 new websites arranged thematically, so you can easily find inspiration for your work. Auth......一起来看看 《The Web Designer's Idea Book, Vol. 2》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具