zoukankan      html  css  js  c++  java
  • python读取yaml文件

    yaml文件可以存储多种不同类型的数据(字符串、数字、元组、列表、字典等);
    所有的数据都是以冒号和缩进的形式进行存储,严格区分大小写、中英文状态;
    yaml文件示例:
     1 # yaml文件中通过#号进行注释
     2 # ①存储字典格式数据
     3 test1:
     4   login:
     5     user: buxiubuzhi
     6     password: 123456
     7 
     8 # 或者
     9 test2: {login:{user: buxiubuzhi,password: 123456}}
    10 # 读取到的数据:
    11 # {
    12 #'test1': {'login': {'user': 'buxiubuzhi', 'password': 123456}},
    13 #'test2': {'login': {'user': 'buxiubuzhi', 'password': 123456}}
    14 #}
    15 # 读取到的数据的数据类型: <class 'dict'>
    16 
    17 # ②存储列表格式数据
    18 
    19 - test: 第一个测试用例
    20 - test: 第二个测试用例
    21 - test: 第三个测试用例
    22 
    23 #读取到的数据: [{'test': '第一个测试用例'}, {'test': '第二个测试用例'}, {'test': '第三个测试用例'}]
    24 #读取到的数据的数据类型: <class 'list'>
    25 
    26 
    27 # 或者
    28 [test: 第一个测试用例,test: 第二个测试用例, test: 第三个测试用例]
    29 # 读取到的数据: [{'test': '第一个测试用例'}, {'test': '第二个测试用例'}, {'test': '第三个测试用例'}]
    30 # 读取到的数据的数据类型: <class 'list'>
    31 
    32 # ③ 数据的锚点  通过&创建锚点
    33 userInfo: &userInfo
    34     username: buxiubuzhi
    35     password: 123456
    36     phoneNumber: 19999999999
    37 
    38 # 注册时需要用到用户信息  通过*引用锚点  << 代表锚点插入的位置
    39 register:
    40     <<: *userInfo
    41 
    42 #输出结果
    43 # {
    44 # 'userInfo': {'username': 'buxiubuzhi', 'password': 123456, 'phoneNumber': 19999999999},
    45 # 'register': {'username': 'buxiubuzhi', 'password': 123456, 'phoneNumber': 19999999999}
    46 # }
    47 
    48 userInfo: &userInfo
    49     username: &username buxiubuzhi
    50     password: &password 123456
    51     phoneNumber: 19999999999
    52 
    53 # 登录时只需要引用用户名和密码
    54 login:
    55     username: *username
    56     password: *password
    57 
    58 # 输出结果
    59 #{
    60 #  'userInfo': {'username': 'buxiubuzhi', 'password': 123456, 'phoneNumber': 19999999999},
    61 #  'login': {'username': 'buxiubuzhi', 'password': 123456}
    62 #}
    1.python读取一个yaml文件
    # 导包
    import yaml
    
    # 定义yaml文件路径
    yaml_path = r'D:Python_Script
    ew_frameworksource_filelogin_page.yaml'
    
    # 获取文件流对象
    with open(yaml_path,'rb')as fileOpen:
        # 通过safe_load 读取文件流
        value = yaml.safe_load(fileOpen)
        print('读取到的数据:',value)
        print('读取到的数据的数据类型:',type(value))

    2.将数据写入到yaml文件

     1 # 定义yaml文件路径
     2 yaml_path = r'./source_file/test1.yaml'
     3 
     4 # 将复杂类型写入到yaml文件中
     5 data = {
     6     "terminal" : "Chrome",
     7     "URL": "www.baidu.com",
     8     "login":{"username":"buxiubuzhi","password":"123456"},
     9     "test":["test_01","test_02","test_03"]
    10 }
    11 
    12 # 写入文件,如果文件不存在将会自动创建
    13 with open(yaml_path,mode="w",encoding="utf-8") as fp:
    14     yaml.dump(data,fp)

    写入结果:

    虽然数据成功写入了,但是有一个问题,写入之后的顺序发生了改变,有时候我们希望数据有一定的关联性数据顺序不能发生改变,那该怎么样呢?

    第二种写入数据的方法,yaml模块的升级版:ruamel.yaml

     1 # 安装模块:ruamel.yaml
     2 # pip install ruamel.yaml
     3 
     4 # 导包
     5 from ruamel import yaml
     6 
     7 # 定义yaml文件路径
     8 yaml_path = r'./source_file/test1.yaml'
     9 
    10 # 将复杂类型写入到yaml文件中
    11 data = {
    12     "terminal" : "Chrome",
    13     "URL": "www.baidu.com",
    14     "login":{"username":"buxiubuzhi","password":"123456"},
    15     "test":["test_01","test_02","test_03"]
    16 }
    17 
    18 # 写入文件,如果文件不存在将会自动创建
    19 with open(yaml_path,mode="w",encoding="utf-8") as fp:
    20     yaml.dump(data,fp,Dumper=yaml.RoundTripDumper) # 只需要添加参数:Dumper=yaml.RoundTripDumper

    写入结果:

     
  • 相关阅读:
    五、mariadb遇到的坑——Linux学习笔记
    四、CentOS 安装mariadb——Linux学习笔记
    [搬运] C# 这些年来受欢迎的特性
    [搬运] 写给 C# 开发人员的函数式编程
    [搬运]在C#使用.NET设计模式的新观点
    在容器中利用Nginx-proxy实现多域名的自动反向代理、免费SSL证书
    [翻译]在 .NET Core 中的并发编程
    [翻译] 使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据
    .NET Core:使用ImageSharp跨平台处理图像
    .NET Core开源组件:后台任务利器之Hangfire
  • 原文地址:https://www.cnblogs.com/XhyTechnologyShare/p/11936268.html
Copyright © 2011-2022 走看看