Website-Suche

Wie liest man eine Properties-Datei in Python?


Wir können das jproperties Modul verwenden, um eine Properties-Datei in Python zu lesen. Eine Properties-Datei enthält Schlüssel-Wert-Paare in jeder Zeile. Das Gleichheitszeichen (=) fungiert als Trennzeichen zwischen Schlüssel und Wert. Eine Zeile, die mit # beginnt, wird als Kommentar behandelt.

Installation der jproperties-Bibliothek

Dieses Modul ist nicht Teil der Standardinstallation. Wir können das jproperties-Modul mit PIP installieren.

pip install jproperties

Eigenschaften Datei in Python lesen

Ich habe eine Eigenschaften-Datei für unser Beispiel erstellt: app-config.properties.

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

Der erste Schritt besteht darin, das Properties-Objekt in unser Python-Programm zu importieren und es zu instanziieren.

from jproperties import Properties

configs = Properties()

Der nächste Schritt besteht darin, die Eigenschaften-Datei in unser Properties-Objekt zu laden.

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

Empfohlene Lektüre: Python mit Statement

Jetzt können wir eine bestimmte Eigenschaft mithilfe der get()-Methode oder über den Index lesen. Das Properties-Objekt ähnelt sehr einem Python-Wörterbuch.

Der Wert wird in einem PropertyTuple-Objekt gespeichert, das ein benanntes Tupel aus zwei Werten ist - Daten und Metadaten. Die jproperties unterstützen ebenfalls die Metadaten von Eigenschaften, aber das interessiert uns hier nicht.

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

Wir können die Funktion len() verwenden, um die Anzahl der Eigenschaften zu erhalten.

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

Was ist, wenn der Schlüssel nicht existiert?

Wenn der Schlüssel nicht existiert, gibt die Methode get() None zurück.

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

Aber wenn wir den Index verwenden, wird KeyError ausgelöst. In diesem Fall ist es besser, diese Ausnahme mit einem try-except-Block zu behandeln.

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"

Alle Eigenschaften drucken

Wir können die Methode items() verwenden, um eine Sammlung von Tupeln zu erhalten, die Schlüssel und entsprechende PropertyTuple Werte enthalten.

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

for item in items_view:
    print(item)

Ausgabe:

<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={}))

Da wir key=value als Ausgabe drucken möchten, können wir den folgenden Code verwenden.

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

Ausgabe:

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

Aufruf der Schlüssel aus der Eigenschaften-Datei

Hier ist ein vollständiges Programm, um die Eigenschaften-Datei zu lesen und eine Liste aller Schlüssel zu erstellen.

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 Eigenschaften aus einer Datei in ein Wörterbuch lesen

Eine Properties-Datei ist dasselbe wie ein Wörterbuch. Daher ist es eine gängige Praxis, die Properties-Datei in ein Wörterbuch zu lesen. Die Schritte sind ähnlich wie oben, mit der Ausnahme der Änderung im Iterationscode, um die Elemente zu einem Wörterbuch hinzuzufügen.

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'}

Referenz: PyPI jproperties-Seite