Pythonista Udemy講座 yamlファイル

Python学習【365日チャレンジ!】120日目のマスターU(@Udemy11)です。

夜はカエルの鳴き声がうるさくてなかなか寝付けない状態になっているのですが、多分都会の人は想像できないと思います。

ほんと絵本の世界に出てくるようなカエルの大合唱が繰り返されます。

カエルの大合唱 Udemy

たまに、はかったのように静かになるときがあるのですが、少し経つとこれまた、はかったかのように鳴き声を合わせて大合唱が再開するんです。

ほんとこればっかりは体験してもらわないと信じてもらえませんので、都会にお住まいの方は、ぜひこの時期に田んぼがたくさんある田舎へ旅行してみてください。

それでは今日のPython学習にはいりましょう!

昨日の復習

昨日は、configparserモジュールのConfigParser()メソッドを使い、設定ファイルであるconfig.iniを作成したり、読み込んだりしました。

指定された設定ファイルを読み込んで活用するれば、他のシステムなどと連携することができるようになります。

詳しい内容は、昨日の記事をごらんください。

今日は、iniファイルと同じ設定ファイルであるyamlファイルを学習します。

yamlとは

yamlYAML Ain’t Markup Languageの略で、直訳すると“YAMLはマークアップ言語ではない”なんて意味のわからないことになってしまいますが、フォーマットされたデータ構造を持ったテキストファイルです。

用途としては、iniファイル同様に、各種の設定ファイルやログファイルなどに使われています。

例:

login_info:
  user: jarvis
  password: jiko9uuk

db_server:
  host: 127.0.0.1
  port: 3306

configparserの場合は、セクションをブラケットの角括弧[]でくくっていましたが、yamlの場合は、:(コロン)で改行して、インデントを半角スペース2つ下げて【key】と【値】を記述します。

yamlファイルの作成

ファイルの作成は、open関数を使って、引数のdefault_flow_styleFalseに指定して値を書き込みます。

import yaml


with open('config.yml', 'w') as yaml_file:
    yaml.dump({
        'login_info': {
            'user': 'jarvis',
            'password': 'jiko9uuk'
        },
        'db_server': {
            'host': '127.0.0.1',
            'port': 3306
        }
    }, yaml_file, default_flow_style=False)

このファイルを実行すれば、同じ階層にconfig.ymlファイルができて、中身は例の形にフォーマットされます。

Pythonista Udemy講座 yamlファイル

引数default_flow_styleを指定しなければ、config.ymlの中身は次のようになります。

login_info: {user: jarvis, password: jiko9uuk}
db_server: {host: 127.0.0.1, port: 3306}

コードの5行目から13行目までに記述されているデータがそのまま書き込まれています

ただ、Pycharmで【CSV Plugin】がインストールされている場合に、引数を指定せずに作成しても、config.ymlファイルを開くと、下記のようにフォーマットされて表示されます。

Python Pycharm yamlファイルの使い方

Pythonistaだと書いた順番に表示されましたが、Pycharmの場合は、順番が逆になっていました。

yamlファイルの読み込み

yamlファイルの読み込みは、config.iniと同じようにopen関数を使いますが、read関数の代わりにsafe_load関数を使用します。

import yaml


with open('config.yml', 'r') as yaml_file:
    data = yaml.safe_load(yaml_file)
    print(data['login_info']['user'])
    print(data['login_info']['password'])
    print(data['db_server']['host'])
    print(data['db_server']['port'])

出力結果

jarvis
jiko9uuk
127.0.0.1
3306

読み込みはload()関数でも大丈夫なのですが、安全じゃないですよ〜という警告がでてしまいます。

安全性を考慮して、読み込みにはsafe_loadの使用が推奨されています。

やってると楽しい

プログラミングでおもしろいのは、思ったとおり動いて、思ったような出力ができることです。

よ〜し、これで完成!

と思って、コードを実行すると、エラーが起こってがっくりすることが多いのが現状です。

ただ、そのエラーがどこで起こっているのか、何が原因だったのかを突き止めて、修正してきちんと動いたときの快感が最高なんですよね。

まだまだ複雑な動作をさせることはできませんが、ひととおり基本的なことをマスターしたら、どんどんコードを書いて、いろいろなプログラムを作りたいと意気込んでいます。

ほんと楽しいのが一番です。

それでは明日もGood Python!