configparser в Python

Введение

Рассмотрим следующую ситуацию: несколько скриптов должны иметь возможность работать в разных режимах.

Этот режим можно задать в виде переменной в начале скрипта в каждом скрипте. В таком случае если режим изменился нужно поменять значение переменной в каждом файле.

Если таких скриптов много потребуется много ручных действий. Сократить их количество можно несколькими способами: с помощью переменных окружения, дополнительных скриптов выполняющих замену, настройкой IDE и созданием общего для всех конфигурационного файла.

В этой статье вы можете изучить пример применения библиотеки configparser для работы с конфигурационными файлами.

Пример

Рассморим файл settings.toml из которого нужно прочитать режим работы.

[general] mode=robot

project/ |-- config.py `-- settings.toml

Несмотря на то, что файлы находятся в одной директории я предпочитаю пользоваться os.path.dirname() чтобы задавать путь до settings.toml причины по которым я рекомендую такой подход можете изучить в статье « Python os.path»

# config.py import os from configparser import ConfigParser def get_mode( filename="settings.toml", section="general"): print("config.mode()") try: os.path.isfile(filename) print(f"file {filename} is found") except FileNotFoundError as e: print(e) # create a parser parser = ConfigParser() file_path = os.path.join(os.path.dirname(__file__), filename) print(parser.read(file_path)) if parser.has_section(section): params = parser.items(section) for param in params: if param[0] == "mode": mode = param[1] else: raise Exception(f"Section {section} not found in the {filename} file") return mode

Теперь во всех скриптах можно просто импортировать config и определять режим функцией get_mode() а в случае изменения режима - редактировать нужно только одно поле в settings.toml

import config mode = config.get_mode() if mode == "robot": def print(s: str): logger.info(s)

Изображение баннера

Конфиг для подключения к БД

В статье «Python и Postgres» вы можете изучить простой пример подключения к базе данных с помощью psycopg2

Учётные данные в этом примере хранятся в файле database.toml и читаются из него будем скриптом config.py на основе configparser а само подлючение реализуется другим скриптом pg_demo.py

С точки зрения применения configparser отличие от предыдущего примера в том, что читаются несколько параметров и результат записывается в словарь .

#!/usr/bin/python # config.py import os from configparser import ConfigParser def config(filename="database.toml", section="postgresql"): # create a parser parser = ConfigParser() file_path = os.path.join(os.path.dirname(__file__), filename) # read config file parser.read(file_path) # get section, default to postgresql db = {} if parser.has_section(section): params = parser.items(section) for param in params: db[param[0]] = param[1] else: raise Exception(f"Section {section} not found in the {filename} file") return db

Автор статьи: Андрей Олегович