[接口测试 - 基础篇] 11 掌握下python解析YAML格式也是需要的

什么是YAML

YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822。 Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。

YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写。 在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言),

格式及示例

数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。

示例如下:

开源优测信息:
    微信公众号:
        公众号: DeepTest
        中文名: 开源优测
        创建者: 苦叶子
        内容系列:            
            - 接口测试            
            - jmeter            
            - selenium            
            - 快学python3            
            - 大数据测试            
            - 杂谈系列
    web站点:
        中文名: 开源优测社区
        状态: 已暂停
        城市: 广州
        网址: www.testingunion.com

注意

  1. 字符串不一定要用双引号标识
  2. 在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符
  3. 允许在文件中加入选择性的空行,以增加可读性
  4. 在一个档案中,可同时包含多个文件,并用“——”分隔
  5. 选择性的符号“...”可以用来表示档案结尾(在利用串流的通讯中,这非常有用,可以在不关闭串流的情况下,发送结束讯号)

PyYaml

PyYAML是一个Python的YAML解析器。

如何安装? 请使用如下命令进行安装

pip install PyYaml

官方文档地址:

http://pyyaml.org/wiki/PyYAMLDocumentation

python yaml几个示例

下面先看一个如何将yaml格式的字符串转换成字典,再将字典转换成字符串的示例:

#-*- coding:utf-8 -*-

__author__ = "苦叶子"

import yaml

if __name__ == "__main__":
    print("python yaml基本示例")

    document = """
    公众号: 开源优测
    基本信息:
        创建人: 苦叶子
        id: DeepTest
    """

    # 将yaml格式内容 转换成 dict类型
    load = yaml.load(document)
    print(type(load))
    print(load)

    print("---" * 25)    

    # 将python对象转换成为yaml格式文档
    output = yaml.dump(load)
    print(type(output))
    print(output)

说明

load:将yaml格式的字符串转换成Python对象 dump:将Python对象转换成yaml格式文档


多段yaml格式内容解析用用到load_all函数,示例如下:

#-*- coding:utf-8 -*-

__author__ = "苦叶子"

import yaml

import codecs

if __name__ == "__main__":
    print("python yaml基本示例")
    
    fp = codecs.open("yaml_data.yaml", "r", "utf-8")
    document = fp.read()
    fp.close()    

    # 将yaml格式内容 转换成 dict类型
    load = yaml.load_all(document)    

    # 遍历迭代器
    for data in load:
        print(type(data))
        print(data)

        print("---" * 25)        
        # 将python对象转换成为yaml格式文档
        output = yaml.dump(data)
        print(type(output))
        print(output)

说明

load_all返回的是一个迭代器对象,需要自己去遍历获取每一个段的转换后才python对象。

请自己对比上述两个示例的一些细节区别,加强对yaml应用和基本解析的理解。

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2017-08-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈树义

简单笔记

1、类的表面类型和实际类型 实例对象有两个类型:表面类型(Apparent Type)和实际类型(ActualType),表面类型是声明时的类型,实际类型是对象...

27150
来自专栏逆向技术

异常处理第二讲,结构化异常(微软未公开)

            异常处理第二讲,结构化异常(微软未公开) 讲解之前,请熟悉WinDbg的使用,工具使用的博客链接 一丶认识段寄存器FS的内容,以及作用 ...

24070
来自专栏Golang语言社区

Golang视角下的设计模式

这篇文章想聊聊Golang语言下的设计模式问题,我觉得这个话题还是比较有意思的。Golang没有像java那样对设计模式疯狂的迷恋,而是摆出了一份“看庭前花开花...

40290
来自专栏DOTNET

.Net多线程编程—并发集合

并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所...

36070
来自专栏技术小讲堂

Angular开发者手册重点翻译之指令(一)文本和属性绑定ngAttr属性绑定

创建自定义的指令 这个文章将解释什么需要在自己的angularjs应用中创建自己的指令,以及如何实现它。 什么是指令 在高的层面上讲,指令是DOM元素中的标记...

39460
来自专栏orientlu

FreeRTOS 内存 Heap管理

FreeRtos 提供的几种 heap 管理在源码目录 Source/Portable/MemMang 下,选择哪种类型管理直接在编译时把原文件加入(比如在 m...

17630
来自专栏码洞

基于Netty实现Redis协议的编码解码器

上面是Netty的服务器端基本消息处理结构,为了便于初学者理解,它和真实的结构有稍许出入。Netty是基于NIO的消息处理框架,用来高效处理网络IO。处理网络消...

32510
来自专栏jojo的技术小屋

原 荐 自己写JSON编辑器

作者:汪娇娇 时间:2018年1月15日 下一篇:自己写代码对比工具 时间过得好快,一下子就2018年了,想起好久没写博客,不觉有些浪费了时光,今天便来补一篇。...

97170
来自专栏大内老A

ASP.NET MVC的Model元数据与Model模板:预定义模板

通过ModelMetadata表示的Model元数据的一个主要的作用在于为定义在HtmlHelper和HtmlHelper<TModel>中的模板方法(这些模板...

269100
来自专栏Jack-Cui

Python3网络爬虫(七):使用Beautiful Soup爬取小说

运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一、Beautiful Soup简介    ...

76070

扫码关注云+社区

领取腾讯云代金券