Поиск по сайту:

Как прочитать файл свойств в Python?


Мы можем использовать модуль jproperties для чтения файла свойств в Python. Файл свойств содержит пары ключ-значение в каждой строке. Равно (=) работает как разделитель между ключом и значением. Строка, начинающаяся с #, считается комментарием.

Установка библиотеки jproperties

Этот модуль не является частью стандартной установки. Мы можем установить модуль jproperties, используя PIP.

# 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()

Следующим шагом является загрузка файла свойств в наш объект свойств.

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

Рекомендуемая литература: Python с оператором

Теперь мы можем прочитать конкретное свойство с помощью метода get() или через индекс. Объект Properties очень похож на словарь Python.

Значение хранится в объекте PropertyTuple, который представляет собой именованный кортеж из двух значений — данных и метаданных. 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() для получения коллекции Tuple, которая содержит ключи и соответствующие значения 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={}))

Поскольку мы хотим напечатать ключ=значение в качестве вывода, мы можем использовать следующий код.

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

Ссылка: страница jproperties PyPI