1. 程式人生 > 實用技巧 >python 引數化之讀取寫入yaml檔案

python 引數化之讀取寫入yaml檔案

最近自動化測試引數化使用了yaml檔案進行存放,簡單記錄讀取和寫入操作

1.讀取如下yaml檔案中的具體value值程式碼如下

#測試環境IP、埠
host: localhost:8080

---
#模擬環境IP、埠
host: localhost:8081
def filePath(fileDir, fileName):
    return os.path.join(
        os.path.dirname(os.path.dirname(__file__)), fileDir, fileName)

def readYaml(filePath):
    with open(filePath, 
'r', encoding='utf-8') as f: return list(yaml.safe_load_all(f)) fileDir = 'config' file = 'config.yaml' data = readYaml(filePath(fileDir, file)) print(data[0]['host'])  # 列印結果為:localhost:8080

2.寫入操作,常用作上個操作返回的值將其寫入yaml檔案,供後面操作讀取使用,yaml檔案及參考程式碼如下:

def set_state(docNumber, key, value):
    file_name 
= "test.yaml" with open(file_name, 'r', encoding="utf-8") as f: doc = list(yaml.safe_load_all(f))  # 將型別轉換為list型別 # print(list(doc)) doc[docNumber][key] = value with open(file_name, 'w', encoding="utf-8") as f: yaml.safe_dump_all(doc, f, default_flow_style=False) set_state(value
='http://122.123.124.125:8888', docNumber=1, key='host')    

執行後的結果為:

host: localhost:8080

---
host: http://122.123.124.125:8888

注意:yaml文件由“---”分隔,如果任何流(例如檔案)包含多個文件,則應使用yaml.safe_load_all函式,而不是yaml.safe_load;

寫入非“---”分隔的文件時,使用yaml.safe_load、yaml.safe_dump即可,同時不需要轉換型別;參考程式碼如下:

def set_state(key, value):
    file_name = "test.yaml"
    with open(file_name, 'r', encoding="utf-8") as f:
        doc = yaml.safe_load(f)

    doc[key] = value
    with open(file_name, 'w', encoding="utf-8") as f:
        yaml.safe_dump(doc, f, default_flow_style=False)