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
Основы Python | |
Type Hints | |
__future__ | |
configparser | |
Менеджер контекста | |
docstring | |
#!: Shebang | |
Объекты | |
Итерация | |
os | |
pathlib |