如何在Python中解析YAML文件
如何在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文件相关推荐
- python解析sql文件_如何从Python中解析sql文件?
是否有任何方法可以从Python中执行.SQL文件中的某些SQL命令,而不是文件中的所有SQL命令?假设我有以下.sql文件:DROP TABLE IF EXISTS `tableA`; CREATE ...
- 面试官问我:如何在 Python 中解析和修改 XML
摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...
- float在python_如何在python中读取.float文件? - python
Improve this question 我正在处理大脑MRI数据,它是.float数据. 您知道如何在python中使用它吗? 与 with open('[43x25520].float') as ...
- python读json文件数组_如何在python中从json文件读取json对象数组
我有一个名为example.json的json文件,包含以下内容[{ "product/productId" : "XXX", "product/ti ...
- 如何在 Python 中读取 .data 文件?
什么是 .data 文件? 创建.data文件是为了存储信息/数据. 此格式的数据通常以逗号分隔值格式或制表符分隔值格式放置. 除此之外,该文件可以是二进制或文本文件格式.在这种情况下,我们将不得不找 ...
- 如何在Python中读取属性文件?
We can use jproperties module to read properties file in Python. A properties file contains key-valu ...
- python 读取日志文件_如何在Python中跟踪日志文件?
使用SH模块(PIP安装sh):from sh import tail# runs foreverfor line in tail("-f", "/var/log/som ...
- python 日期解析_如何在Python中解析ISO 8601格式的日期?
python 日期解析 Python provides a datetime standard library which introduces datetime.isoformat(). As pe ...
- 如何在Python中解析XML?
我在包含xml的数据库中有很多行,并且我正在尝试编写一个Python脚本,该脚本将遍历这些行并计算出现特定节点属性的实例数量. 例如,我的树看起来像: <foo><bar>&l ...
最新文章
- 搜索引擎之---Apache solr的实现
- 高影响力期刊iMeta扬帆起航!第一篇文章已上线!
- ubuntu如何修改php文件夹权限,Linux命令chmod:修改文件或文件夹权限
- 【个人笔记】OpenCV4 C++ 图像处理与视频分析 12课
- Android 手机 超级终端命令解析
- 空洞卷积(Atrous convolution)
- 高斯消去法,列主元法,LU分解法python程序
- Android应用源码之仿墨迹天气插件
- 探索的乐趣(物理笔记)
- php expecting,php – 解析错误:语法错误,意外的’.’,expecting’,’或’;’
- 计算机组成原理资料(选择题)
- FFmpeg--一个操作视频音频的强大工具
- KD树(K-Dimension Tree)
- 2021年山东省安全员B证试题及解析及山东省安全员B证作业模拟考试
- java使用File类创建文件或文件夹
- 复旦大学李孝男博士:结合词典的中文命名实体识别
- 5、frida进阶-Android逆向之旅---Hook神器家族的Frida工具使用详解
- 新概念英语1册71课
- 2016年度盘点:一家典型互联网公司的必备工具宝箱
- git pull 报错Your configuration specifies to merge with the XXX from the remote, but no such ref was..