首頁 > 軟體

Python讀寫yaml檔案

2022-03-20 13:02:14

1.關於yaml

yaml基本語法規則:

  • 大小寫敏感
  • 使用縮排表示層級關係
  • 縮排時不允許使用Tab鍵,只允許使用空格。
  • 縮排的空格數目不重要,只要相同層級的元素左側對齊即可
  • #表示註釋,從這個字元一直到行尾,都會被解析器忽略,這個和python的註釋一樣

2.yaml資料結構

YAML 支援的資料結構有三種:

  • 物件

鍵值對的集合,又稱為對映(mapping)/ 雜湊(hashes) / 字典(dictionary)
物件的一組鍵值對,使用冒號結構表示。

  • 陣列

一組按次序排列的值,又稱為序列(sequence) / 列表(list)
一組連詞線開頭的行,構成一個陣列。

  • 純量(scalars

單個的、不可再分的值
包括字串,布林值,整數,浮點數,Null,時間,日期

3.yaml檔案格式

auth.login:
  data:
    name: '18888888883'
    password: jnyj123456
  url: https://XXXX-api-XXXX.zje.com/auth/login
headers:
  Accept: '*/*'
  Accept-Encoding: gzip, deflate, br
  Accept-Language: zh-CN,zh;q=0.9
  Connection: keep-alive
  Content-Length: '46'
  Content-type: application/json
  Host: dexin-api-test.zje.com
  Origin: https://XXXX-spa-XXX.zje.com
  Referer: https://XXXX-spa-XXX.zje.com/
  Sec-Fetch-Dest: empty
  Sec-Fetch-Mode: cors
  Sec-Fetch-Site: same-site
  User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML,
    like Gecko) Chrome/98.0.4758.80 Safari/537.36
  authorization: Bearer
  sec-ch-ua: '" Not A;Brand";v="33"
  sec-ch-ua-mobile: ?0000
  sec-ch-ua-platform: macOSis

學習產出:

class OpenYaml(object):

    def __init__(self):
        self.file_path = os.path.join(route("/DataYaml/yaml.yaml"))  # 拼接讀取的檔案路徑

    def open(self, *args):
        '''
           args[0]: 字典名稱
           args[1]: 欄位值
           讀取檔案
        '''
        try:
            if len(args) == 2:  # 根據傳值判斷執行內容
                with open(self.file_path, "r") as f:  # 讀取yaml
                    Json = f.read()  # 獲取yaml
                    Dict = yaml.safe_load(Json)[args[0]]  # 提取制定內容
                if args[1] in Dict.keys():  # 判斷key是否存在
                    logs.info(f"yaml檔案,查詢內容成功,內容:{Dict[args[1]]}")
                    return Dict[args[1]]
                else:
                    print(f"對應欄位{args[1]}不存在...")
                    logs.info(f"對應欄位{args[1]}不存在...")
            else:
                with open(self.file_path, "r") as f:
                    Json = f.read()
                    Dict = yaml.safe_load(Json)[args[0]]
                return Dict
        except Exception as e:
            print(f'讀取yaml檔案,報錯:{e}')
            logs.info(f'讀取yaml檔案,報錯:{e}')

    def Wri_file(self, *args):

        '''
        :param args: args[0] 介面欄位、args[1] key、 args[2] value
        :return: None
        把欄位寫入yaml
        '''
        try:
            with open(self.file_path, encoding="utf-8") as f:  # 讀取檔案
                data = yaml.load(f.read(), Loader=yaml.FullLoader)  # 獲取讀取內容
            print(data[args[0]])
            if data is not None:  # 判斷讀取內容是否為空
                if str(data[args[0]][args[1]]) in str(data[args[0]]):  # 判斷name是否存在在dict
                    data[args[0]][args[1]] = args[2]
                    with open(self.file_path, 'w', encoding="utf-8") as f:  # 寫入
                        yaml.dump(data, stream=f, allow_unicode=True)
                else:
                    print("寫入檔案的欄位不存在!寫入失敗...")
            else:
                logs.info("寫入檔案的返回值為空!不能寫入...")
        except Exception as y:
            logs.info(f"寫入檔案失敗:{y}")


if __name__ == "__main__":
    OpenYaml().Wri_file("headers", "Content-Length", "22")
    OpenYaml().open("auth.login", "data")

到此這篇關於Python讀寫yaml檔案的文章就介紹到這了,更多相關Python讀寫yaml內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com