Python使用YAML

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

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

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

查看所有标签

猜你喜欢:

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

算法基础

算法基础

[美] 托马斯 H.科尔曼(Thomas H.Cormen) / 王宏志 / 机械工业出版社 / 2015-12 / 59.00

本书介绍了什么是计算机算法,如何描述它们,以及如何来评估它们。这些计算机算法将提供:利用计算机搜索信息的简单方式;解决各种排序问题的方法;利用有向无环图和最短路径法来解决基本问题的方法(可用于建模公路网络,任务间的依赖及金融关系);解决字符串(例如DNA结构)问题的方法;密码学背后的基本原理;数据压缩的基础知识;以及甚至一些没有人能够理解如何在计算机上用相当长的时间来解决的问题。 本书适合作......一起来看看 《算法基础》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

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

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具