ウェブサイト検索

Pythonでプロパティファイルを読む方法は?


Pythonではjpropertiesモジュールを使用してプロパティファイルを読み取ることができます。プロパティファイルは、各行にキーと値のペアが含まれています。イコール(=)はキーと値の間のデリミタとして機能します。#で始まる行はコメントとして扱われます。

jpropertiesライブラリのインストール

このモジュールは標準インストールの一部ではありません。PIPを使ってjpropertiesモジュールをインストールできます。

pip install jproperties

Pythonでプロパティファイルを読む

私たちの例のために、プロパティファイルを作成しました: app-config.properties。

Database Credentials
DB_HOST=localhost
DB_SCHEMA=Test
DB_User=root
DB_PWD=root@neon

最初のステップは、PropertiesオブジェクトをPythonプログラムにインポートし、それをインスタンス化することです。

from jproperties import Properties

configs = Properties()

次のステップは、プロパティファイルを私たちのPropertiesオブジェクトに読み込むことです。

with open('app-config.properties', 'rb') as config_file:
    configs.load(config_file)

推奨読書: Python with ステートメント

さて、特定のプロパティをget()メソッドまたはインデックスを通じて読み取ることができます。プロパティオブジェクトはPythonの辞書に非常に似ています。

その値はPropertyTupleオブジェクトに保存されており、これはdataとmetaの2つの値を持つ名前付きタプルです。jpropertiesもプロパティのメタデータをサポートしていますが、ここではそれには興味がありません。

print(configs.get("DB_User"))  
PropertyTuple(data='root', meta={})

print(f'Database User: {configs.get("DB_User").data}')  
Database User: root

print(f'Database Password: {configs["DB_PWD"].data}')  
Database Password: root@neon

len()関数を使用してプロパティの数を取得できます。

print(f'Properties Count: {len(configs)}')  
Properties Count: 4

鍵が存在しない場合はどうなりますか?

キーが存在しない場合、get()メソッドはNoneを返します。

random_value = configs.get("Random_Key")
print(random_value)  # None

しかし、インデックスを使用すると KeyError が発生します。その場合、この例外を try-except ブロックを使って処理する方が良いです。

try:
    random_value = configs["Random_Key"]
    print(random_value)
except KeyError as ke:
    print(f'{ke}, lookup key was "Random_Key"')

Output:
'Key not found', lookup key was "Random_Key"

すべてのプロパティを印刷する

items() メソッドを使用して、キーとそれに対応する PropertyTuple 値を含むタプルのコレクションを取得できます。

items_view = configs.items()
print(type(items_view))

for item in items_view:
    print(item)

出力:

<class 'collections.abc.ItemsView'>
('DB_HOST', PropertyTuple(data='localhost', meta={}))
('DB_SCHEMA', PropertyTuple(data='Test', meta={}))
('DB_User', PropertyTuple(data='root', meta={}))
('DB_PWD', PropertyTuple(data='root@neon', meta={}))

出力としてkey=valueを印刷することを目指しているので、以下のコードを使用できます。

for item in items_view:
    print(item[0], '=', item[1].data)

出力:

DB_HOST = localhost
DB_SCHEMA = Test
DB_User = root
DB_PWD = root@neon

プロパティファイルからキーのリストを取得する

ここにプロパティファイルを読み取り、すべてのキーのリストを作成する完全なプログラムがあります。

from jproperties import Properties

configs = Properties()

with open('app-config.properties', 'rb') as config_file:
    configs.load(config_file)

items_view = configs.items()
list_keys = []

for item in items_view:
    list_keys.append(item[0])

print(list_keys)  
['DB_HOST', 'DB_SCHEMA', 'DB_User', 'DB_PWD']

Pythonでプロパティファイルを辞書に読み込む

プロパティファイルは辞書と同じです。したがって、プロパティファイルを辞書に読み込むことは一般的な習慣です。手順は上記と似ていますが、要素を辞書に追加するための反復コードの変更があります。

db_configs_dict = {}

for item in items_view:
    db_configs_dict[item[0]] = item[1].data

print(db_configs_dict)
{'DB_HOST': 'localhost', 'DB_SCHEMA': 'Test', 'DB_User': 'root', 'DB_PWD': 'root@neon'}

参考: PyPI jproperties ページ

関連記事: