Python读写yaml文件

一、yaml文件介绍

yaml是一个专门用来写配置文件的语言。

1. yaml文件规则

  • 区分大小写;
  • 使用缩进表示层级关系;
  • 使用空格键缩进,而非Tab键缩进
  • 缩进的空格数目不固定,只需要相同层级的元素左侧对齐;
  • 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
  • 注释标识为#

2. yaml文件数据结构

  • 对象:键值对的集合(简称 "映射或字典")
    键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔
  • 数组:一组按序排列的值(简称 "序列或列表")
    数组前加有 “-” 符号,符号与值之间需用空格分隔
  • 纯量(scalars):单个的、不可再分的值(如:字符串、bool值、整数、浮点数、时间、日期、null等)
    None值可用null可 ~ 表示

3、安装yaml

pip install pyyaml

4、使用yaml

from ruamel import yaml

5、用途:

在我们做自动化测试中,可用作配置文件,配置一些服务器域名、mysql配置、登录信息、toekn等很方便快速读取

二、将字典写入yaml文件


  
  
  1. desired_caps = {
  2. 'platformName': 'Android哈哈哈', #移动设备系统IOS或Android
  3. 'platformVersion': '7.1.2', #Android手机系统版本号
  4. 'deviceName': '852', #手机唯一设备号
  5. 'app': 'C:\\Users\\wangli\\Desktop\\kbgz-v5.9.0-debug.apk', #APP文件路径
  6. 'appPackage': 'com', #APP包名
  7. 'appActivity': 'cui.setup.SplashActivity', #设置启动的Activity
  8. 'noReset': 'True', #每次运行不重新安装APP
  9. 'unicodeKeyboard': 'True', #是否使用unicode键盘输入,在输入中文字符和unicode字符时设置为true
  10. 'resetKeyboard': 'True', #隐藏键盘
  11. 'autoGrantPermissions': 'True',
  12. 'autoAcceptAlerts':[ "python", "c++", "java"],
  13. 'chromeOptions': { 'androidProcess': 'com.tencent.mm:tools'}
  14. }
  15. with open( "test.yaml", "w",encoding= "utf-8") as f:
  16. yaml.dump(desired_caps,f,Dumper=yaml.RoundTripDumper)
  17. 写入文件如下:
  18. deviceName: '852'
  19. unicodeKeyboard: 'True'
  20. autoAcceptAlerts:
  21. - python
  22. - c++
  23. - java
  24. autoGrantPermissions: 'True'
  25. platformVersion: 7.1 .2
  26. platformName: "Android\u54C8\u54C8\u54C8"
  27. app: C:\Users\wangli\Desktop\kbgz-v5 .9 .0-debug.apk
  28. appPackage: com
  29. chromeOptions:
  30. androidProcess: com.tencent.mm:tools
  31. appActivity: cui.setup.SplashActivity
  32. noReset: 'True'
  33. resetKeyboard: 'True'

三、将列表写入yaml文件


  
  
  1. list=[ 'python', 'java', 'c++', 'C#',{ 'androidProcess': 'com.tencent.mm:tools'},[ "python", "c++", "java"]]
  2. with open( "test.yaml", "w",encoding= "utf-8") as f:
  3. yaml.dump( list,f,Dumper=yaml.RoundTripDumper)
  4. 写入文件如下:
  5. - python
  6. - java
  7. - c++
  8. - C #
  9. - androidProcess: com.tencent.mm:tools
  10. - - python
  11. - c++
  12. - java

四、读取yaml文件中字典

用python读取yaml文件案例,先用open方法读取文件数据,再通过load方法转成字典,这个load跟json里面的load是相似的


  
  
  1. yaml文件内容
  2. chromeOptions:
  3. androidProcess: com.tencent.mm:tools
  4. appActivity: cui.setup.SplashActivity
  5. noReset: 'True'
  6. app: C:\Users\wangli\Desktop\kbgz-v5 .9 .0-debug.apk
  7. appPackage: com
  8. platformVersion: 7.1 .2
  9. resetKeyboard: 'True'
  10. autoGrantPermissions: 'True'
  11. deviceName: '852'
  12. autoAcceptAlerts:
  13. - python
  14. - c++
  15. - java
  16. unicodeKeyboard: 'True'
  17. platformName: "Android\u54C8\u54C8\u54C8"
  18. 读取yaml
  19. with open( 'test.yaml', 'r', encoding= 'utf-8') as f:
  20. print(yaml.load(f.read(),Loader=yaml.Loader))
  21. 读出内容如下
  22. { 'platformVersion': '7.1.2', 'resetKeyboard': 'True', 'appPackage': 'com', 'autoAcceptAlerts': [ 'python', 'c++', 'java'], 'autoGrantPermissions': 'True', 'deviceName': '852', 'appActivity': 'cui.setup.SplashActivity', 'unicodeKeyboard': 'True', 'noReset': 'True', 'platformName': 'Android哈哈哈', 'app': 'C:\\Users\\wangli\\Desktop\\kbgz-v5.9.0-debug.apk', 'chromeOptions': { 'androidProcess': 'com.tencent.mm:tools'}}

五、读取yaml文件中列表


  
  
  1. yaml文件内容
  2. - python
  3. - java
  4. - c++
  5. - C #
  6. - androidProcess: com.tencent.mm:tools
  7. - - python
  8. - c++
  9. - java
  10. 读取yaml文件
  11. with open( 'test.yaml', 'r', encoding= 'utf-8') as f:
  12. print(yaml.load(f.read(),Loader=yaml.Loader))
  13. 读取出内容如下
  14. "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
  15. [ 'python', 'java', 'c++', 'C#', { 'androidProcess': 'com.tencent.mm:tools'}, [ 'python', 'c++', 'java']]
  16. Process finished with exit code 0
                        <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#csdnc-thumbsup"></use>
                        </svg><span class="name">点赞</span>
                        <span class="count"></span>
                        </a></li>
                        <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#icon-csdnc-Collection-G"></use>
                        </svg><span class="name">收藏</span></a></li>
                        <li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#icon-csdnc-fenxiang"></use>
                        </svg>分享</a></li>
                        <!--打赏开始-->
                                                <!--打赏结束-->
                                                <li class="tool-item tool-more">
                            <a>
                            <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                            </a>
                            <ul class="more-box">
                                <li class="item"><a class="article-report">文章举报</a></li>
                            </ul>
                        </li>
                                            </ul>
                </div>
                            </div>
            <div class="person-messagebox">
                <div class="left-message"><a href="https://blog.csdn.net/qq_36502272">
                    <img src="https://profile.csdnimg.cn/6/7/5/3_qq_36502272" class="avatar_pic" username="qq_36502272">
                                            <img src="https://g.csdnimg.cn/static/user-reg-year/2x/3.png" class="user-years">
                                    </a></div>
                <div class="middle-message">
                                        <div class="title"><span class="tit"><a href="https://blog.csdn.net/qq_36502272" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">橙子全栈测试</a></span>
                                            </div>
                    <div class="text"><span>发布了105 篇原创文章</span> · <span>获赞 70</span> · <span>访问量 2万+</span></div>
                </div>
                                <div class="right-message">
                                            <a href="https://im.csdn.net/im/main.html?userName=qq_36502272" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                        </a>
                                                            <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                    </div>
                            </div>
                    </div>
    
发布了4 篇原创文章 · 获赞 2 · 访问量 143

一、yaml文件介绍

猜你喜欢

转载自blog.csdn.net/qq_41574648/article/details/104342544