Python学習ノートのYamlの紹介と使用


目次
  • Yamlの紹介とインストール
  • Yamlの紹介
  • Yamlプロファイル
  • Yamlインストール
  • 辞書とリストの操作
  • 辞書
  • リスト
  • 辞書とリストが互いにネストされている
  • 辞書ネスト辞書
  • ディクショナリネストリスト
  • リストネストリスト
  • リストネスト辞書
  • 複数のyamlドキュメントを読み込む
  • Yamlパッケージ
  • Yamlを使用してappiumパラメータを構成
  • Yamlの紹介とインストール
    Yamlの紹介
  • Yamlは、すべてのプログラミング言語で使用可能な友好的なデータシーケンス化標準
  • である.
  • 文法は他の高次言語と類似しており、辞書、リスト、その他の基本データ型の形態
  • を簡単に表現することができる.
    Yaml設定フォーマット
  • Yamlはコメントをサポートし、「#」で
  • カッコなどの記号を強要する必要はありません
  • 階層をインデントで区別し、Pythonと類似
  • Yamlインストール
    pip install PyYaml
    

    辞書とリストの操作
    辞書
    ymlという接尾辞のファイルを作成して入力します
    name: "test_yaml"
    result: "success"
    
  • 注意、コロンの後ろに必ずスペースがあります
  • Pythonコードでymlファイルを読み込む
    import yaml
    
    with open("yaml_demo.yml", "r") as f:
        data = yaml.safe_load(f)
    
    print(data)
    
    #     
    {'name': 'test_yaml', 'resule': 'success'}
    

    リスト#リスト#
    ymlファイルに書き込む
    - "a"
    - "b"
    - "c"
    

    そして引き続きPythonでymlファイルを読み込みます
    import yaml
    
    with open("yaml_demo.yml", "r") as f:
        data = yaml.safe_load(f)
    
    print(data)
    
    #     
    ['a', 'b', 'c']
    

    辞書とリストは互いにネストされています
    辞書ネスト辞書
    Ymlファイルで編集
    person1:
      name: "connor"
      age: "18"
    person2:
      name: "amy"
      age: "20"
    

    Pythonでファイルを読み込む
    import yaml
    
    with open("yaml_demo.yml", "r") as f:
        data = yaml.safe_load(f)
    
    print(data)
    
    #     
    {'person1': {'name': 'connor', 'age': '18'}, 'person2': {'name': 'amy', 'age': '20'}}
    

    辞書ネストリスト
    Ymlファイルで編集
    person1:
      - "connor"
      - "18"
    person2:
      - "Amy"
      - "20"
    

    Pythonでファイルを読み込む
    import yaml
    
    with open("yaml_demo.yml", "r") as f:
        data = yaml.safe_load(f)
    
    print(data)
    
    #     
    {'person1': ['connor', '18'], 'person2': ['Amy', '20']}
    

    リストネストリスト
    -
      - "a"
      - "b"
      - "c"
    -
      - "e"
      - "f"
      - "d"
    

    Pythonでファイルを読み込む
    import yaml
    
    with open("yaml_demo.yml", "r") as f:
        data = yaml.safe_load(f)
    
    print(data)
    
    #     
    [['a', 'b', 'c'], ['e', 'f', 'd']] 
    

    リストネスト辞書
    - username: "connor"
    - age:
        A: "20"
        B: "30"
    

    Pythonでファイルを読み込む
    import yaml
    
    with open("yaml_demo.yml", "r") as f:
        data = yaml.safe_load(f)
    
    print(data)
    
    #     
    [{'username': 'connor'}, {'age': {'A': '20', 'B': '30'}}]
    

    複数のyamlドキュメントを読み込む
    以上はいずれも1つのドキュメントを読み取るものであり、yamlは---を追加することで複数のドキュメントを分割することができ、Pythonの読み取り方法はyaml.safe_load_all()を用いる.
    ---
       : "connor"
      : "123456"
    
    ---
       : "AMY"
      : "456789"
    

    Pythonでファイルを読み込む
    import yaml
    
    with open("yaml_demo.yml", "r", encoding="utf8") as f:  #   yml     ,      encoding="utf8"
        data = yaml.safe_load(f)  #     generator  
        for i in data:
            print(i)  #          
    
    #     
    {'   ': 'connor', '  ': '123456'}
    {'   ': 'AMY', '  ': '456789'}
    

    Yamlパッケージ
    utilsディレクトリを作成し、Yamlutilを作成します.pyファイルは、ツールクラスYamlReaderを定義し、初期化時にymlファイルが存在するかどうかを判断し、単一のドキュメントを読み取る方法read_dataと複数のドキュメントを読み取る方法read_allを定義する必要があります.実装コード:
    import os
    import yaml
    
    # 1.    
    class YamlReader:
        # 2.      ,         
        def __init__(self, yamlfile):
            if os.path.exists(yamlfile):
                self.yamlf = yamlfile
            else:
                raise FileNotFoundError("     ")
            self._data = None  #          
            self._data_all = None  #          
    
        #     , Yaml      、    
        def read_data(self):
            if not self._data:  #          
                with open(self.yamlf, "r", encoding="utf8") as f:
                    self._data = yaml.safe_load(f)
            return self._data
    
        def read_all(self):
            if not self._data_all:  #          
                with open(self.yamlf, "r", encoding="utf8") as f:
                    self._data_all = list(yaml.safe_load_all(f))
            return self._data_all
    

    このツールクラスを呼び出してymlファイルを読み込んでみます
    from utils.Yamlutil import YamlReader
    #    yamutils,       
    readr = YamlReader(yamlfile="yaml_demo.yml")
    

    単一ドキュメントのymlを読み込む
    #     ,    
    data = readr.read_data()  #       
    print(data)
    #    
    [['a', 'b', 'c'], ['e', 'f', 'd']]
    

    単一ドキュメントのymlを読み込む
    #     ,    
    data = readr.read_all()  #       
    print(data)
    #    
    [[['a', 'b', 'c'], ['e', 'f', 'd']], {'   ': 'connor', '  ': '123456'}, {'   ': 'AMY', '  ': '456789'}]
    

    Yamlを使用したappiumパラメータの構成
    既にymlファイルを読み込むツールクラスYamlReaderが作成されているので、ymlを作成してappiumに書き込む接続構成だけで済みます
    platformName: "Android"
    platformVersion: "10"
    deviceName: "CLT-AL00"
    appPackage: "com.gotokeep.keep"
    appActivity: "com.gotokeep.keep.refactor.business.main.activity.MainActivity"
    

    ツールクラスYamlReaderを呼び出してymlファイルを読み込むとよい
    from appium import webdriver
    from utils.Yamlutil import YamlReader
    import time
    reader = YamlReader("../conf/appium_config.yaml")  #   yml  
    desired = reader.read_data()
    # print(desired)
    driver = webdriver.Remote("http://localhost:4723/wd/hub", desired)
    # time.sleep(5)
    driver.close()