AI Technology Community
5.13、Python yamlモジュール:yamlファイルを処理する
yamlの正式名称はYet Another Markup Languageで、名前の通り、簡略化されたxmlデータ形式を提供することを目的としています。確かに、yamlファイルはxmlファイルよりもはるかに簡単です。
yamlファイルには以下の特徴があります:
大文字と小文字を区別します。
インデントを使用して階層関係を表します。
インデント時にTabキーの使用は許可されず、スペースのみ使用可能です。
インデントのスペース数は重要ではなく、同じ階層の要素が左揃えになっていればOKです。
行コメントをサポートしており、#でコメントの開始を示します。
yamlは以下の3種類のデータ型をサポートしています:
1) オブジェクトで、Pythonの辞書に相当します。以下は例です:
0: a # 0がキー、aが値
1: b # 辞書の2番目の要素
2) 配列で、Pythonのリストに相当します。
- 1 # -で始まるのは配列要素を表し、これは最初の要素
- 2 # 2番目の要素
- 3 # 3番目の要素
3) スカラーで、Pythonの文字列、整数、浮動小数点数などに相当します。
これら3種類のデータ型を組み合わせることで、複雑なデータ構造を表現することができます。例えば、以下の複雑なPythonオブジェクトについて:
{ 1: [ 1, 2, 3, { "name": "python", "age": 20.0 } ], 2: "value 2" }
yamlで表現すると以下のようになります:
1: - 1 - 2 - 3 - age: 20.0 name: python 2: value 2
このセクションでは、yamlファイルを解析して生成できるライブラリ、pyyamlについて説明します。このライブラリは自分でインストールする必要があり、インストール方法は以下の通りです:
pip install pyyaml
このライブラリを使用するには、以下のようにインポートする必要があります:
import yaml
このライブラリは主に2つの機能を提供します。1つはyamlファイルをPythonオブジェクトに変換すること、もう1つはPythonオブジェクトをyamlファイルに書き込むことです。
yamlモジュールにはload()関数があり、この関数はファイルから内容を読み込んでPythonオブジェクトを返します。
以下は簡単な例です:
import yaml fd = open("yamlWriteDemo1.yaml", 'r', encoding='utf-8') data = yaml.load(fd, Loader=yaml.FullLoader) # ファイル内容を読み込んでオブジェクトを返す fd.close() print(data)
このスクリプトを実行した出力は以下の通りです:
$ cat yamlWriteDemo1.yaml # 入力ファイルの内容を確認
0: a # ファイル内容
1: b
$ python yamlReadDemo1.py # スクリプトを実行
{0: 'a', 1: 'b'} # 得られたPythonオブジェクト
ファイルへの書き込みにはdump()関数を使用できます。この関数はPythonオブジェクトとファイルオブジェクトを受け取り、Pythonオブジェクトをyaml形式でファイルオブジェクトに書き込みます。以下はyamlファイルへの簡単な書き込み例です:
import yaml fd = open("yamlWriteDemo4.yaml", 'w', encoding='utf-8') data = { # 書き込むオブジェクト 1: [ 1, 2, 3, { "name": "python", "age": 20.0 } ], 2: "value 2" } yaml.dump(data, fd) # Pythonオブジェクトをファイルオブジェクトに書き込む fd.close() # ファイルを閉じる
実行後の出力は以下の通りです:
$ python yamlWriteDemo4.py # スクリプトを実行
$ cat yamlWriteDemo4.yaml # 出力されたyamlファイルを確認
1:
- 1
- 2
- 3
- age: 20.0
name: python
2: value 2
14
item of content
大規模ソフトウェアプロジェクトでは、ファイル操作は避けられません。この章では、普通のテキストファイルとバイナリファイルの操作方法について説明します。具体的には、ファイルを開く方法、ファイルの読み書き、ファイルモード、および with 文の使用方法などを含みます。
- 442hits
- 0replay
-
0like
- collect
- send report