python解析yaml
1. python中四种配置文件
常用的配置文件后缀是.ini、.conf、.py,当然还有使用.json、.txt的,推荐使用常用的.ini、.py,配置文件的名字一般是config便于理解和使用。
ini配置文件,这类配置文件我们使用内置configparser库来使用,它可以实现配置文件的写入、更新、删除、读取等操作非常方便,建议使用这种方式。
新建一个config.ini的配置文件内容如下,编码格式要是 utf-8 以免出错。:
其中[]中的是section节点,该节点下的等式是option即键=值
然后每一行写一个option ,每个选项就是一个option。直接写名字,后面加 " = " 再加上它的值就行,字符串的表示不要加引号,否则引号也会被解析出来。
可以在配置文件中加入注释 ,但是注释必须是单独的一行,且以 “#” 开头。只是每次运行时不会读入注释,只要运行一次,写入文件后,所有的注释都会消失。
config.json文件
使用python内置的 json 标准库进行解析ini文件。
load() 从json文件中读取json格式数据
loads() 将字符串类型数据转化为json格式数据
mp() 将json格式数据保存到文件
mps() 将json格式数据保存为字符串类型
TOML的语法广泛地由key = "value"、[节名]、#注释构成。
支持以下数据类型:字符串、整形、浮点型、布尔型、日期时间、数组和图表。
config.toml文件
使用外部库 toml 解析toml文件。
安装:pip install toml
读取文件
安装:
YAML是目前最推荐的配置文件格式。优秀的配置文件标准它几乎都有:
容易阅读和修改,支持注释。
支持丰富的数据类型。
不同格式的明确表达。
yaml使用时需要注意:
yaml强制缩进。虽然不规定具体缩进几个空格,但是同一级的内容要保持相同的缩进。
冒号后面一定要加空格, 否则无法解析。
python解析 yaml 可以使用pyyaml库,操作和标准的文件操作非常类似:
得到的data就是解析后的数据,在python当中,它是一个嵌套的字典:
想获取某一项配置,再通过字典的操作获取:
config.yaml文件
读取
2. Python 自动化处理 Yaml 文件-
Yaml文件内容—示例1:
Yaml文件内容—示例2:
从上述示例文件内容可以看到 Yaml 数据结构:
1). 对象:键值对的集合(简称 "映射或字典")
例如:family 和 address 这两个对象后面分别有对应的键值对集合。
2). 键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔
例如:
family 对象中的 key 为 name 与其对应的 value 值 Smile_Family 之间是使用空格分隔的。
address 对象中的 key 为 province 与其对应的 value 值 BeiJing 之间是使用空格分隔的。
3). 数组:一组按序排列的值(简称 "序列或列表"),数组前加有 “-” 符号,符号与值之间需用空格分隔
例如:
parents 中的 John 和 Jane
children 中的 Lily 和 Frank
4). 纯量(scalars):单个的、不可再分的值。例如:字符串、bool值、整数、浮点数、时间、日期、null等
None值可用null也可用 ~ 表示;
yaml文件内容如下:
Python解析输出为:
这个例子输出一个字典,其中value包括所有基本类型
Yaml文件内容如下:
Python解析输出为:悄局
Yaml文件内容如下:
Python输出为:
如果字符串没有空格或特殊字符,不需要加引号,但如果其中有空格或启则让特殊字符,则需要加引号。
这里要注意单引号和双引号的区别:
单引号中的特殊字符转到 Python 会被转义,也就是到最后是原样输出;
双引号不会被 Python 转义,到最后是输出了特殊字符盯搭;
Yaml文件内容如下:
Python输出:
3. python常用函数包有哪些
一些python常用函数包:
1、Urllib3
Urllib3是一个 Python 的 HTTP 客户端,它拥有 Python 标准库中缺少的许多功能:
线程安全
连接池
客户端 SSL/TLS 验证
使用分段编码上传文件
用来重试请求和处理 HTTP 重定向的助手
支持 gzip 和 deflate 编码
HTTP 和 SOCKS 的代理支持
2、Six
six 是一个是 Python 2 和 3 的兼容性库。这个项目旨在支持可同时运行在 Python 2 和 3 上的代码库。它提供了许多可简化 Python 2 和 3 之间语法差异的函数。
3、botocore、boto3、s3transfer、awscli
Botocore是 AWS 的底层接口。Botocore是 Boto3 库(#22)的基础,后者让你可以使用 Amazon S3 和 Amazon EC2 一类的服务。Botocore 还是 AWS-CLI 的基础,后者为 AWS 提供统一的命令行界面。
S3transfer(#7)是用于管理 Amazon S3 传输的 Python 库。它正在积极开发中,其介绍页面不推荐人们现在使用,或者至少等版本固定下来再用,因为其 API 可能发生变化,在次要版本之间都可能更改。Boto3、AWS-CLI和其他许多项目都依赖s3transfer。
4、Pip
pip是“Pip Installs Packages”的首字母递归缩写。
pip很容易使用。要安装一个包只需pip install <package name>即可,而删除包只需pip uninstall <package name>即可。
最大优点之一是它可以获取包列表,通常以requirements.txt文件的形式获取。该文件能选择包含所需版本的详细规范。大多数 Python 项目都包含这样的文件。
如果结合使用pip与virtualenv(列表中的 #57),就可以创建可预测的隔离环境,同时不会干扰底层系统,反之亦然。
5、Python-dateutil
python-dateutil模块提供了对标准datetime模块的强大扩展。我的经验是,常规的Python datetime缺少哪些功能,python-dateutil就能补足那一块。
6、Requests
Requests建立在我们的 #1 库——urllib3基础上。它让 Web 请求变得非常简单。相比urllib3来说,很多人更喜欢这个包。而且使用它的最终用户可能也比urllib3更多。后者更偏底层,并且考虑到它对内部的控制级别,它一般是作为其他项目的依赖项。
7、Certifi
近年来,几乎所有网站都转向 SSL,你可以通过地址栏中的小锁符号来识别它。加了小锁意味着与该站点的通信是安全和加密的,能防止窃听行为。
8、Idna
根据其 PyPI 页面,idna提供了“对 RFC5891 中指定的应用程序中国际化域名(IDNA)协议的支持。”
IDNA的核心是两个函数:ToASCII和ToUnicode。ToASCII会将国际 Unicode 域转换为 ASCII 字符串。ToUnicode则逆转该过程。在IDNA包中,这些函数称为idna.encode()和idna.decode()
9、PyYAML
YAML是一种数据序列化格式。它的设计宗旨是让人类和计算机都能很容易地阅读代码——人类很容易读写它的内容,计算机也可以解析它。
PyYAML是 Python 的YAML解析器和发射器,这意味着它可以读写YAML。它会把任何 Python 对象写成YAML:列表、字典,甚至是类实例都包括在内。
10、Pyasn1
像上面的IDNA一样,这个项目也非常有用:
ASN.1 类型和 DER/BER/CER 编码(X.208)的纯 Python 实现
所幸这个已有数十年历史的标准有很多信息可用。ASN.1是 Abstract Syntax Notation One 的缩写,它就像是数据序列化的教父。它来自电信行业。也许你知道协议缓冲区或 Apache Thrift?这就是它们的 1984 年版本。
11、Docutils
Docutils是一个模块化系统,用来将纯文本文档处理为很多有用的格式,例如 HTML、XML 和 LaTeX 等。Docutils能读取reStructuredText格式的纯文本文档,这种格式是类似于 MarkDown 的易读标记语法。
12、Chardet
你可以用chardet模块来检测文件或数据流的字符集。比如说,需要分析大量随机文本时,这会很有用。但你也可以在处理远程下载的数据,但不知道用的是什么字符集时使用它。
13、RSA
rsa包是一个纯 Python 的 RSA 实现。它支持:
加密和解密
签名和验证签名
根据 PKCS#1 1.5 版生成密钥
它既可以用作 Python 库,也能在命令行中使用。
14、Jmespath
JMESPath,发音为“James path”,使 Python 中的 JSON 更容易使用。它允许你声明性地指定如何从 JSON 文档中提取元素。
15、Setuptools
它是用于创建 Python 包的工具。不过,其文档很糟糕。它没有清晰描述它的用途,并且文档中包含无效链接。最好的信息源是这个站点,特别是这个创建 Python 包的指南。
16、Pytz
像dateutils一样,这个库可帮助你处理日期和时间。有时候,时区处理起来可能很麻烦。幸好有这样的包,可以让事情变得简单些。
17、Futures
从 Python 3.2 开始,python 提供current.futures模块,可帮助你实现异步执行。futures 包是该库适用于 Python 2 的 backport。它不适用于 Python3 用户,因为 Python 3 原生提供了该模块。
18、Colorama
使用 Colorama,你可以为终端添加一些颜色:
更多Python知识请关注Python自学网
4. 使用 Python 读写文件
有些数据是临时的,它们在应用程序运行时存储在内存中,然后丢弃。但是有些数据是持久的。它们存储在硬盘驱动器上供以后使用,而且它们通常是用户最关心的东西。对于程序员来说,编写代码读写文件是很常见的,但每种语言处理该任务的方式都不同。本文演示了如何使用 Python 处理文件数据。
在 Linux 上,你可能已经安装了 Python。如果没有,你可以通过发行版软件仓库安装它。例如,在 CentOS 或 RHEL 上:
在 macOS 上,你可以使用 MacPorts或Homebrew安装。在 Windows 上,你可以使用Chocolatey安装。
一旦安装了 Python,打开你最喜欢的文本编辑器,准备好写代码吧。
如果你需要向一个文件中写入数据,记住有三个步骤:
这与你在计算机上编码、编辑照片或执行其他操作时使用的步骤完全相同。首先,打开要编辑的文档,然后进行编辑,最后关闭文档。
在 Python 中,过程是这样的:
这个例子中,第一行以 写 模式打开了一个文件,然后用变量 f 表示,我使用了 f 是因为它在 Python 代码中很常见,使用其他任意有效变量名也能正常工作。
在打开文件时,有不同的模式:
第二行表示向文件中写入数据,本例写入的是纯文本,但你可以写入任意类型的数据。
最后一行关闭了文件。
对于快速的文件交互,常用有一种简短的方法可以写入数据。它不会使文件保持打开状态,所以你不必记得调用 close 函数。相反,它使用 with 语法:
如果你或你的用户需要通过应用程序需要向文件中写入一些数据,然后你需要使用它们,那么你就需要读取文件了。与写入类似,逻辑一样:
同样的,这个逻辑反映了你一开始使用计算机就已知的内容。阅读文档,你可以打开、阅读,然后关闭。在计算机术语中,“打开”文件意味着将其加载到内存中。
实际上,一个文本文件内容肯定不止一行。例如,你需要读取一个配置文件、 游戏 存档或乐队下一首歌曲的歌词,正如你打开一本实体书时,你不可能立刻读完整本书,代码也只能解析已经加载到内存中的文件。因此,你可能需要遍历文件的内容。
示例的第一行指明使用 读 模式打开一个文件,然后文件交由变量 f 表示,但就像你写数据一样,变量名是任意的。 f 并没有什么特殊的,它只是单词 “file” 的最简表示,所以 Python 程序员会经常使用它。
在第二行,我们使用了 line ,另一个任意变量名,用来表示 f 的每一行。这告诉 Python 逐行迭代文件的内容,并将每一行的内容打印到输出中(在本例中为终端或IDLE)。
就像写入一样,使用 with 语法是一种更简短的方法读取数据。即不需要调用 close 方法,方便地快速交互。
使用 Python 有很多方法向文件写入数据,包括用 JSON、YAML、TOML等不同的格式写入。还有一个非常好的内置方法用于创建和维护SQLite数据库,以及许多库来处理不同的文件格式,包括图像、音频和视频等。
via: https://opensource.com/article/21/7/read-write-files-python
作者:Seth Kenlon选题:lujun9972译者:MjSeven校对:turbokernel