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文件


desired_caps = {
	'platformName':'Android哈哈哈',#移動設備系統IOS或Android
	'platformVersion':'7.1.2',#Android手機系統版本號
	'deviceName':'852',#手機唯一設備號
	'app':'C:\\Users\\wangli\\Desktop\\kbgz-v5.9.0-debug.apk',#APP文件路徑
	'appPackage':'com',#APP包名
	'appActivity':'cui.setup.SplashActivity',#設置啓動的Activity
    'noReset':'True',#每次運行不重新安裝APP
	'unicodeKeyboard':'True', #是否使用unicode鍵盤輸入,在輸入中文字符和unicode字符時設置爲true
	'resetKeyboard':'True',#隱藏鍵盤
    'autoGrantPermissions':'True',
    'autoAcceptAlerts':["python","c++","java"],
    'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'}
	}
with open("test.yaml","w",encoding="utf-8") as f:
    yaml.dump(desired_caps,f,Dumper=yaml.RoundTripDumper)



寫入文件如下:
deviceName: '852'
unicodeKeyboard: 'True'
autoAcceptAlerts:
- python
- c++
- java
autoGrantPermissions: 'True'
platformVersion: 7.1.2
platformName: "Android\u54C8\u54C8\u54C8"
app: C:\Users\wangli\Desktop\kbgz-v5.9.0-debug.apk
appPackage: com
chromeOptions:
  androidProcess: com.tencent.mm:tools
appActivity: cui.setup.SplashActivity
noReset: 'True'
resetKeyboard: 'True'

三、將列表寫入yaml文件

list=['python','java','c++','C#',{'androidProcess': 'com.tencent.mm:tools'},["python","c++","java"]]
with open("test.yaml","w",encoding="utf-8") as f:
    yaml.dump(list,f,Dumper=yaml.RoundTripDumper)

寫入文件如下:

- python
- java
- c++
- C#
- androidProcess: com.tencent.mm:tools
- - python
  - c++
  - java

 

四、讀取yaml文件中字典

用python讀取yaml文件案例,先用open方法讀取文件數據,再通過load方法轉成字典,這個load跟json裏面的load是相似的

yaml文件內容
chromeOptions:
  androidProcess: com.tencent.mm:tools
appActivity: cui.setup.SplashActivity
noReset: 'True'
app: C:\Users\wangli\Desktop\kbgz-v5.9.0-debug.apk
appPackage: com
platformVersion: 7.1.2
resetKeyboard: 'True'
autoGrantPermissions: 'True'
deviceName: '852'
autoAcceptAlerts:
- python
- c++
- java
unicodeKeyboard: 'True'
platformName: "Android\u54C8\u54C8\u54C8"


讀取yaml
with open('test.yaml', 'r', encoding='utf-8') as f:
	print(yaml.load(f.read(),Loader=yaml.Loader))



讀出內容如下
{'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文件中列表

yaml文件內容
- python
- java
- c++
- C#
- androidProcess: com.tencent.mm:tools
- - python
  - c++
  - java

讀取yaml文件
with open('test.yaml', 'r', encoding='utf-8') as f:
	print(yaml.load(f.read(),Loader=yaml.Loader))

讀取出內容如下
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
['python', 'java', 'c++', 'C#', {'androidProcess': 'com.tencent.mm:tools'}, ['python', 'c++', 'java']]

Process finished with exit code 0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章