【Python】Pyyaml和ruamel.yaml

2024-08-27 18:32
文章标签 python yaml pyyaml ruamel

本文主要是介绍【Python】Pyyaml和ruamel.yaml,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

PYYAML

读取yaml

保存yaml

读取保存的yaml文件 

 yaml文件规则

yaml文件数据结构

ruamel.yaml

格式化保存yaml

使用ruamel.yaml读取yaml

使用ruamel.yaml时python中符号对应于yaml中符号


PYYAML

config.yaml文件

username: zxx
age: 18
orther:height: 175CMweitht: 107KG
JobHistory:- name: IBMdate: 2015-2017- name: GAdate: 2017-now

读取yaml

read_yaml.py文件

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# load-yaml.pyimport os
import yamluserInfo = yaml.load(open(r"D:\myproject\MyUtils\test_yaml\config.yaml", 'r'))
print(userInfo)

结果为:

{'JobHistory': [{'name': 'IBM', 'date': '2015-2017'}, {'name': 'GA', 'date': '2017-now'}], 'username': 'zxx', 'orther': {'weitht': '107KG', 'height': '175CM'}, 'age': 18}

保存yaml

import yamldata = {"cookie1":{'domain': '.yiyao.cc', 'expiry': 1521558688.480118, 'httpOnly': False}}f = open(r'D:\myproject\MyUtils\test_yaml\save_config.yaml','a')
print(yaml.dump(data, f))
f.close()

结果为

{'cookie1': {'domain': '.yiyao.cc', 'expiry': 1521558688.480118, 'httpOnly': False}}

save_config.yaml文件内容为

读取保存的yaml文件 

import yamlf = open(r'D:\myproject\MyUtils\test_yaml\save_config.yaml','r')
# 读取文件
cont = f.read()
# 加载数据
x = yaml.load(cont)
# 打印数据
print(x)
f.close()

结果为:

{'cookie1': {'expiry': 1521558688.480118, 'domain': '.yiyao.cc', 'httpOnly': False}}

 yaml文件规则

  • 区分大小写;
  • 使用缩进表示层级关系;
  • 使用空格键缩进,而非Tab键缩进
  • 缩进的空格数目不固定,只需要相同层级的元素左侧对齐;
  • 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
  • 注释标识为#

yaml文件数据结构

  • 对象:键值对的集合(简称 "映射或字典")
    键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔
  • 数组:一组按序排列的值(简称 "序列或列表")
    数组前加有 “-” 符号,符号与值之间需用空格分隔
  • 纯量(scalars):单个的、不可再分的值(如:字符串、bool值、整数、浮点数、时间、日期、null等)
    None值可用null可 ~ 表示

ruamel.yaml

从上面pyyaml保存yaml的处理中可以发现,保存出来的save_config.yaml是字典形式,不是yaml的标准形式,这对于追求一致性的强迫症来说,有点难受。这时发现有一个库ruamel.yaml可以完美解决这个问题。

格式化保存yaml

from __future__ import print_functionimport ruamel.yaml
import osdef generate_yaml_doc_ruamel(yaml_file):from ruamel import yamlpy_object = {'school': 'zhang','students': ['a', 'b']}file = open(yaml_file, 'w', encoding='utf-8')yaml.dump(py_object, file, Dumper=yaml.RoundTripDumper)file.close()
current_path = os.path.abspath(".")
yaml_path = os.path.join(current_path, "save_ruamel_config.yaml")
generate_yaml_doc_ruamel(yaml_path)

结果为

使用ruamel.yaml读取yaml

import os# 通过from ruamel import yaml读取yaml文件
def get_yaml_data_ruamel(yaml_file):from ruamel import yamlfile = open(yaml_file, 'r', encoding='utf-8')data = yaml.load(file.read(), Loader=yaml.Loader)file.close()print(data)
current_path = os.path.abspath(".")
yaml_path = os.path.join(current_path, "save_ruamel_config.yaml")
get_yaml_data_ruamel(yaml_path)

使用ruamel.yaml时python中符号对应于yaml中符号

python中代码

py_object = {'school': 'zhang','students': ['a', 'b'],'age':{'old':34,'young':10},'test':{'test1':123, 'test2':456, 'test3':{'test3_0':0, 'test3_1':[1,1,1,1]}}}

结果为 

age:young: 10old: 34
school: zhang
test:test3:test3_0: 0test3_1:- 1- 1- 1- 1test2: 456test1: 123
students:
- a
- b

 

这篇关于【Python】Pyyaml和ruamel.yaml的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112443

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(