数据及配置文件之争
数据及文件通常有三种类型:
YAML兼容JSON格式,简洁,强大,灵活,可以很方便的构造层级数据并快速转为Python中的字典。
YAML简介
YAML(YAML Ain't Markup Language)即一种反标记(XML)语言。强调数据为中心,而非标记。YAML大小写敏感,使用缩进代表层级关系。
YAML中支持对象Object(对应Python中的字典), 数组Array(对应Python中的列表)以及常量(字符串、数字(int/float),true/false/null)。
相比于JSON格式,YAML免除了双引号,逗号,大括号,中括号等,(当然也支持原始的JSON格式),并且支持注释,类型转换,跨行,锚点,引用及插入等等。
基本格式
示例文件demo.yaml:
# 注释:示例yaml文件 name: Cactus age: 18 skills: - - Python - 3 - - Java - 5 has_blog: true gf: ~
相当于以下JSON格式
{ "name": "Cactus", "age": 18, "skills": [ [ "Python", 3 ], [ "Java", 5 ] ], "has_blog": true, "gf": null }
类型转换
使用!!str, !!float等可以将默认类型转为指定类型,如
对应JSON格式
[ 3.0, "4", "true" ]
多行文本及拼接
示例:
a: |
我
喜欢你b: >
我
不喜欢你
才怪对应JSON格式
{ "a": "我\n喜欢你\n", "b": "我 不喜欢你 才怪" }
锚点,引用及插入
在-或:后 加上&锚点名为当前字段建立锚点,下面可使用*锚点名引用锚点,或使用<<: *锚点名直接将锚点数据插入到当前的数据中,示例如下:
users: - &zs name: 张三 password: !!str 123456 - &ls name: 李四 password: abcdefg case1: login: *zs case2: user: <<: *ls age: 20
对应JSON格式:
{ "users": [ { "name": "张三", "password": "123456" }, { "name": "李四", "password": "abcdefg" } ], "case1": { "login": { "name": "张三", "password": "123456" } }, "case2": { "user": { "name": "李四", "password": "abcdefg", "age": 20 } } }
Python操作YAML文件及字符串
需要安装pyyaml, pip install pyyaml
和JSON文件类似,yaml也提供load和dump两种方法。
由于yaml.load()支持原生Python对象,不安全,建议使用yaml.safe_load()
示例1:yaml字符串 -> 字典
import yaml yaml_str = ''' name: Cactus age: 18 skills: - - Python - 3 - - Java - 5 has_blog: true gf: ~ ''' print(yaml.safe_load(yaml_str))
打印结果:
{'name': 'Cactus', 'age': 18, 'skills': [['Python', 3], ['Java', 5]], 'has_blog': True, 'gf': None}
如果有中文,可以使用yaml.load(yaml_str.encoding('utf-8))
示例2:yaml文件 -> 字典
import yaml with open('demo.yaml', encoding='utf-8') as f: # demo.yaml内容同上例yaml字符串 print(yaml.safe_load(f))
打印结果同上例。
字典 -> yaml字符串或文件
import yaml dict_var = {'name': 'Cactus', 'age': 18, 'skills': [['Python', 3], ['Java', 5]], 'has_blog': True, 'gf': None} print(yaml.dump(dict_var,)) # 转为字符串,使用默认flow流格式 with open('demo5.yaml', 'w', encoding='utf-8') as f: yaml.dump(dict_var, f, default_flow_style=False) # 写入文件,不是用flow流格式
打印内容:
age: 18
gf: null
has_blog: true
name: Cactus
skills:
- [Python, 3]
- [Java, 5]
1demo5.yaml1文件内容:
age: 18
gf: null
has_blog: true
name: Cactus
skills:
- - Python
- 3
- - Java
- 5
更多操作可参考pyyaml官方文档:https://pyyaml.org/wiki/PyYAMLDocumentation
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍PHP解压tar.gz格式文件的方法,包括了PHP解压tar.gz格式文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP解压tar.gz格式文件的方法。分享给大家供大家参考,具体如下: 1、运用php自带压缩与归档扩展(phar) 2、首先需要安装pear类管理工具 linux下 /usr/local/php/bin/pear install Archive_T
这是我第一次使用YAML文件,所以我首先想到的是找到任何可以帮助我解析文件的库。 我找到了两个库,YamlBean和snakeyaml。我不确定我要用哪一个。 下面是我试图解析的文件的一个示例: 该文件将动态更改,所以我不知道该文件将包含多少用户或组。 有人能帮我开始吗?最好的图书馆是什么?YamlBean还是Snakeyaml? 我想,我需要将这些信息保存在一个可以轻松重复的东西中。
本文向大家介绍Java文本文件操作方法实例详解,包括了Java文本文件操作方法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java文本文件操作方法。分享给大家供大家参考。具体分析如下: 最初Java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类,这两个类都是抽象类,Writer中write(char[] ch,int off,int len
本文向大家介绍Linux下解压.tar.xz格式文件的方法,包括了Linux下解压.tar.xz格式文件的方法的使用技巧和注意事项,需要的朋友参考一下 前言 对于xz这个压缩相信很多人陌生,但xz是绝大数linux默认就带的一个压缩工具,xz格式比7z还要小。 今天在下载Node.js源码包的时候遇到的这种压缩格式。查了一下资料,这里进行一下记录,分享出来供大家参考学习,下面来看看详细的记录吧。
本文向大家介绍Python3操作读写CSV文件使用包过程解析,包括了Python3操作读写CSV文件使用包过程解析的使用技巧和注意事项,需要的朋友参考一下 CSV(Comma-Separated Values)即逗号分隔值,一种以逗号分隔按行存储的文本文件,所有的值都表现为字符串类型(注意:数字为字符串类型)。 如果CSV中有中文,应以utf-8编码读写,如果要支持Excel查看,应是要用utf-
本文向大家介绍Python3之外部文件调用Django程序操作model等文件实现方式,包括了Python3之外部文件调用Django程序操作model等文件实现方式的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说啦,还是直接看代码吧! 补充知识:Django媒体文件的调用和配置 这类文件可由用户或管理员上传,因此可能会变化。比如说,用户的头像就是媒体文件,电商网站中的商品图片也是媒体文件