見出し画像

Python入門 (4) - YAMLファイルの読み書き

PythonでのYAMLファイルの読み書きを備忘録的にまとめました。

前回

1. YAML

「YAML」は、データフォーマットの1つです。「XML」よりも読み書きしやすく、わかりやすいのが特徴です。
以下の用途に向いています。

・設定ファイル
・ログファイル
・シリアライズ

2. YAMLの表記法

YAMLの表記法として、「シーケンス」「ハッシュ」「スカラー」の3つがあります。

◎ シーケンス
「シーケンス」はPythonでいうところの配列です。「シーケンス」を表現するには「- 値」と表記します。

- a
- b
- c
実行結果
['a', 'b', 'c']

ネストさせることもできます。

- a
-
  - b1
  - b2
- c
実行結果
['a', ['b1', 'b2'], 'c']

以下のように「[]」で横に並べて表記することも可能です。

[a, b, c]
実行結果
['a', 'b', 'c']

◎ ハッシュ
「ハッシュ」はPythonでいうところの辞書です。「ハッシュ」を表現するには「キー:値」と表記します。

A: a
B: b
C: c
実行結果
{'A': 'a', 'B': 'b', 'C': 'c'}

ネストさせることもできます。

A: a
B:
  B1: b1
  B2: b2
C: c
実行結果
{'A': 'a', 'B': {'B1': 'b1', 'B2': 'b2'}, 'C': 'c'}

ハッシュとシーケンスを組み合わせることもできます。

- name:  Taro
  age: 14
- name:  Jiro
  age: 13
- name:  Hanako
  age: 13
実行結果
[{'name': 'Taro', 'age': 14},
 {'name': 'Jiro', 'age': 13}, 
 {'name': 'Hanako', 'age': 13}]

以下のように「{}」で横に並べて表記することも可能です。

{A: a, B: b, C: c}
実行結果
{'A': 'a', 'B': 'b', 'C': 'c'}

◎ スカラー
スカラーは、数値や文字列や真偽値などのデータです。

・整数
・浮動小数点
・真偽値
(true/false, yes/no)
・Null値 (null, ~)
・日付 (yyyy-mm-dd)
・タイムスタンプ (yyyy-mm-dd hh:mm:ss [+-]hh:mm)

3. PyYAML

PythonでYAMLファイルの読み書きを行うには、「PyYAML」を使います。

$ pip install pyyaml

◎ YAMLファイルの読み込み
YAMLの読み込みを行うコードは、次のとおりです。

import yaml

# YAMLファイルの読み込み
with open('test.yaml') as file:
    yml = yaml.safe_load(file)
    print(yml)

◎ YAMLファイルの書き込み
YAMLの書き込みを行うコードは、次のとおりです。

import yaml

# YAMLファイルの書き込み
yml = [{'name': '太郎', 'age': 14},
    {'name': '次郎', 'age': 13},
    {'name': '花子', 'age': 13}]
with open('test.yaml', 'w') as file:
    yaml.dump(yml, file)
- age: 14
  name: "\u592A\u90CE"
- age: 13
  name: "\u6B21\u90CE"
- age: 13
  name: "\u82B1\u5B50"

日本語でYAML出力するには、codecsを使います。

import yaml
import codecs

# YAMLファイルの書き込み
yml = [{'name': '太郎 です', 'age': 14},
    {'name': '次郎', 'age': 13},
    {'name': '花子', 'age': 13}]
with codecs.open('test.yaml', 'w', 'utf-8') as file:
    yaml.dump(yml, file, encoding='utf-8', allow_unicode=True)
- age: 14
  name: 太郎 です
- age: 13
  name: 次郎
- age: 13
  name: 花子

次回


この記事が気に入ったらサポートをしてみませんか?