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

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

查看所有标签

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

敏捷项目管理

敏捷项目管理

马克·莱顿 / 人民邮电出版社 / 2015-12-1 / CNY 69.00

当你进行软件开发时,你一定需要一种更快捷、更灵活的方式。《敏捷项目管理》将通过手把手的方式帮你充分发挥你手中的所有可利用工具和技术,以一种非常有效的方式管理好你的项目。通过《敏捷项目管理》,你可以学到:在数周内而不是数月内完成你的软件开发;使用敏捷技术降低项目风险,并提升核心收益;将敏捷理论付诸实践;避免项目管理普遍存在的误区。一起来看看 《敏捷项目管理》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码