Python使用YAML

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

内容简介:我们知道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

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

查看所有标签

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

编码的奥秘

编码的奥秘

Charles Petzold / 伍卫国、王宣政、孙燕妮 / 机械工业出版社 / 2000-9-1 / 24.00

渴望交流是大多数人的天性。在本书中,“编码”通常指一种在人和机器之间进行信息转换的系统。换句话说、编码即是交流。有时我们将编码看得很神秘,其实大多数编码并非都是这样。大多数的编码都需要被很好地理解,因为它们是人类交流的基础。――《编码的奥秘》 手电筒、英国人入侵、黑色的猫和跷跷板与计算机有什么必然联系?本书向我们展示了使用语言的一些直观方法并创造新的方法来进行相互之间的交流。此书使我们明白了......一起来看看 《编码的奥秘》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

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

HSV CMYK互换工具