如何在Python中解析YAML文件?


#1楼

不依赖C标头的最简单,最纯净的方法是PyYaml( 文档 ):

#!/usr/bin/env pythonimport yamlwith open("example.yaml", 'r') as stream:try:print(yaml.safe_load(stream))except yaml.YAMLError as exc:print(exc)

就是这样。 普通的yaml.load()函数也存在,但是yaml.safe_load()始终是首选,除非您明确需要提供的任意对象序列化/反序列化,以避免引入执行任意代码的可能性。

请注意,PyYaml项目支持YAML 1.1规范之前的版本。 如果需要YAML 1.2规范支持,请参见ruamel.yaml,如本答案中所述 。


#2楼

如果您具有符合YAML 1.2规范 (2009年发布)的YAML ,则应使用ruamel.yaml (免责声明:我是该软件包的作者)。 它本质上是PyYAML的超集,它支持大多数YAML 1.1(自2005年起)。

如果希望在往返时保留您的注释,则当然应该使用ruamel.yaml。

升级@Jon的示例很容易:

import ruamel.yaml as yamlwith open("example.yaml") as stream:try:print(yaml.safe_load(stream))except yaml.YAMLError as exc:print(exc)

使用safe_load()除非您真正完全控制了输入,需要输入(很少有这种情况)并且知道您在做什么。

如果使用pathlib Path来处理文件,则最好使用新的ruamel.yaml API:

from ruamel.yaml import YAML
from pathlib import Pathpath = Path('example.yaml')
yaml = YAML(typ='safe')
data = yaml.load(path)

#3楼

使用Python 2 + 3(和Unicode)读写YAML文件

# -*- coding: utf-8 -*-
import yaml
import io# Define data
data = {'a list': [1, 42, 3.141, 1337, 'help', u'€'],'a string': 'bla','another dict': {'foo': 'bar','key': 'value','the answer': 42}
}# Write YAML file
with io.open('data.yaml', 'w', encoding='utf8') as outfile:yaml.dump(data, outfile, default_flow_style=False, allow_unicode=True)# Read YAML file
with open("data.yaml", 'r') as stream:data_loaded = yaml.safe_load(stream)print(data == data_loaded)

创建的YAML文件

a list:
- 1
- 42
- 3.141
- 1337
- help
- €
a string: bla
another dict:foo: barkey: valuethe answer: 42

通用文件结尾

.yml.yaml

备择方案

  • CSV:超简单格式( 读写 )
  • JSON:非常适合编写人类可读的数据; 非常常用( 读和写 )
  • YAML:YAML是JSON的超集,但更易于阅读( 读写 , JSON和YAML的比较 )
  • pickle:Python序列化格式( 读写 )
  • MessagePack ( Python软件包 ):更紧凑的表示形式( 读和写 )
  • HDF5 ( Python程序包 ):适用于矩阵( 读写 )
  • XML:存在太多*叹*( 读与写 )

对于您的应用程序,以下内容可能很重要:

  • 其他编程语言的支持
  • 阅读/写作表现
  • 紧凑度(文件大小)

另请参阅: 数据序列化格式的比较

如果您想寻找一种制作配置文件的方法,则可能需要阅读我的短文《 Python中的配置文件》。


#4楼

#!/usr/bin/env pythonimport sys
import yamldef main(argv):with open(argv[0]) as stream:try:#print(yaml.load(stream))return 0except yaml.YAMLError as exc:print(exc)return 1if __name__ == "__main__":sys.exit(main(sys.argv[1:]))

#5楼

导入yaml模块并将文件加载到名为“ my_dict”的字典中:

import yaml
my_dict = yaml.load(open('filename'))

这就是您所需要的。 现在,整个yaml文件都在“ my_dict”字典中。


#6楼

我使用ruamel.yaml 。 详情和辩论在这里 。

from ruamel import yamlwith open(filename, 'r') as fp:read_data = yaml.load(fp)

ruamel.yaml的用法与PyYAML的旧用法兼容(有一些简单的可解决的问题),正如我在提供的链接中所述,使用

from ruamel import yaml

代替

import yaml

它将解决您的大多数问题。

编辑 :事实证明PyYAML并没有死,它只是保存在另一个地方。


#7楼

例:


defaults.yaml

url: https://www.google.com

环境

from ruamel import yamldata = yaml.safe_load(open('defaults.yaml'))
data['url']

如何在Python中解析YAML文件相关推荐

  1. python解析sql文件_如何从Python中解析sql文件?

    是否有任何方法可以从Python中执行.SQL文件中的某些SQL命令,而不是文件中的所有SQL命令?假设我有以下.sql文件:DROP TABLE IF EXISTS `tableA`; CREATE ...

  2. 面试官问我:如何在 Python 中解析和修改 XML

    摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...

  3. float在python_如何在python中读取.float文件? - python

    Improve this question 我正在处理大脑MRI数据,它是.float数据. 您知道如何在python中使用它吗? 与 with open('[43x25520].float') as ...

  4. python读json文件数组_如何在python中从json文件读取json对象数组

    我有一个名为example.json的json文件,包含以下内容[{ "product/productId" : "XXX", "product/ti ...

  5. 如何在 Python 中读取 .data 文件?

    什么是 .data 文件? 创建.data文件是为了存储信息/数据. 此格式的数据通常以逗号分隔值格式或制表符分隔值格式放置. 除此之外,该文件可以是二进制或文本文件格式.在这种情况下,我们将不得不找 ...

  6. 如何在Python中读取属性文件?

    We can use jproperties module to read properties file in Python. A properties file contains key-valu ...

  7. python 读取日志文件_如何在Python中跟踪日志文件?

    使用SH模块(PIP安装sh):from sh import tail# runs foreverfor line in tail("-f", "/var/log/som ...

  8. python 日期解析_如何在Python中解析ISO 8601格式的日期?

    python 日期解析 Python provides a datetime standard library which introduces datetime.isoformat(). As pe ...

  9. 如何在Python中解析XML?

    我在包含xml的数据库中有很多行,并且我正在尝试编写一个Python脚本,该脚本将遍历这些行并计算出现特定节点属性的实例数量. 例如,我的树看起来像: <foo><bar>&l ...

最新文章

  1. 搜索引擎之---Apache solr的实现
  2. 高影响力期刊iMeta扬帆起航!第一篇文章已上线!
  3. ubuntu如何修改php文件夹权限,Linux命令chmod:修改文件或文件夹权限
  4. 【个人笔记】OpenCV4 C++ 图像处理与视频分析 12课
  5. Android 手机 超级终端命令解析
  6. 空洞卷积(Atrous convolution)
  7. 高斯消去法,列主元法,LU分解法python程序
  8. Android应用源码之仿墨迹天气插件
  9. 探索的乐趣(物理笔记)
  10. php expecting,php – 解析错误:语法错误,意外的’.’,expecting’,’或’;’
  11. 计算机组成原理资料(选择题)
  12. FFmpeg--一个操作视频音频的强大工具
  13. KD树(K-Dimension Tree)
  14. 2021年山东省安全员B证试题及解析及山东省安全员B证作业模拟考试
  15. java使用File类创建文件或文件夹
  16. 复旦大学李孝男博士:结合词典的中文命名实体识别
  17. 5、frida进阶-Android逆向之旅---Hook神器家族的Frida工具使用详解
  18. 新概念英语1册71课
  19. 2016年度盘点:一家典型互联网公司的必备工具宝箱
  20. git pull 报错Your configuration specifies to merge with the XXX from the remote, but no such ref was..

热门文章

  1. Android游戏开发指南lt;一gt;背景地图
  2. 世界应该多点理解关爱,少点争吵
  3. Android多线程:深入分析 Handler机制源码(二)
  4. 如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?
  5. flex 嵌套 之 高度自适应
  6. javascript : 点击按钮,把某标签中的内容复制到剪贴板
  7. Centos 中 service iptables stop 失败
  8. Redis总结(五)缓存雪崩和缓存穿透等问题
  9. 字符编码的发展(ASCII、Unicode、utf-8)
  10. hdu 2065DP