Жестко запрограммированные значения — ужасная идея. Вместо этого используйте configparser для чтения файлов конфигурации .ini.
Жесткое кодирование значений конфигурации в приложениях Python — это весело и весело, пока что-то не сломается. Никто не любит искать и заменять значения в сотнях файлов только из-за небольшого изменения URL-адреса конечной точки API. К счастью, есть способ обойти это — записать конфигурацию приложения в отдельный файл.
Сегодня вы узнаете все о работе с .ini
файлами в Python. Я считаю, что они обеспечивают большую гибкость, чем JSON или YAML, но немного хуже, чем файлы конфигурации на основе Python. Почему? Ну, условная логика, для начала.
Далее вы увидите, как установить и использовать библиотеку configparser
Python с .ini
файлами конфигурации в Python.
Как установить библиотеку ConfigParser Python
Вам понадобится модуль configparser
для работы с .ini
файлами конфигурации. Он не поставляется с Python, поэтому вам придется его установить. Команда установки различается в зависимости от того, используете ли вы Pip или Anaconda. Вот команда установки для обоих:
Пип:
pip install configparser
Анаконда:
conda install -c conda-forge -y configparser
И это все, что нам нужно, чтобы начать работать с .ini
файлами в Python.
Как читать файлы конфигурации .ini с помощью ConfigParser
Я создал новую папку с двумя файлами:
app.py
— содержит код Python на сегодня.config.ini
— содержит данные конфигурации, которые мы не хотим жестко кодировать в сценариях Python.
Что касается содержимого файла .ini
, то его лучше всего разбить на разделы. Ниже вы увидите два раздела с одинаковыми ключами и разными значениями. Цель состоит в том, чтобы использовать разные места для сохранения файлов в разных средах. Например, в среде разработки файл будет сохранен на рабочем столе, а в рабочей среде тот же файл будет сохранен во временном каталоге:
[dev] api_url = https://gorest.co.in/public/v2/users save_dir = /Users/dradecic/Desktop/users_data save_file = users.json
[prod] api_url = https://gorest.co.in/public/v2/users save_dir = /tmp/users_data save_file = users.json
Но как вы можете прочитать этот файл в Python? Модуль configparser
делает это невероятно простым. Просто создайте новый экземпляр класса ConfigParser
и прочитайте файл .ini
:
import configparser
config = configparser.ConfigParser() config.read("config.ini")
Теперь мы поиграем с различными методами, которые вы можете использовать для доступа к разделам или отдельным клавишам.
Например, в приведенном ниже фрагменте показано, как распечатать все разделы файла config.ini
:
print(config.sections())
Если вы хотите получить доступ к одному элементу, не забудьте сначала получить доступ к разделу. Подойдет обычная нотация словаря Python:
print(config["dev"]["api_url"])
Вы также можете использовать метод get()
для доступа к отдельным ключам:
print(config.get("dev", "api_url"))
Если вы сомневаетесь, что ключ не существует, или хотите быть особенно осторожным, укажите аргумент fallback
при вызове get()
:
print(config.get("dev", "not_exist", fallback=-1))
Вы также можете перебрать весь раздел и получить доступ к его ключам и значениям:
for key in config["dev"]:
print(key)
Но теперь самое интересное. Мы разделили файл config.ini
на две секции — dev и prod. По умолчанию это не имеет реального значения. Что мы можем сделать, так это проверить, на какой ОС работает Python. Например, если код работает в macOS, мы можем предположить, что это среда разработки:
import platform
env = "dev" if platform.system().lower() == "darwin" else "prod" print(env)
Теперь мы можем использовать переменную env
для доступа к ключам и значениям в правильном разделе. Я запускаю код на Mac, поэтому содержимое раздела dev
печатается:
import platform
env = "dev" if platform.system().lower() == "darwin" else "prod" for key in config[env]: print(f"{key} = {config[env][key]}")
И это основы работы с ini
файлами в Python. Далее вы увидите, как использовать этот тип файла конфигурации при подключении к удаленным API.
Как использовать модуль ConfigParser в приложениях Python
Теперь мы создадим небольшой скрипт Python, который подключается к удаленному REST API и загружает данные в формате JSON. У нас уже есть URL-адреса и пути в файле config.ini
. Создайте новый скрипт Python, и все готово.
Фрагмент кода ниже отправляет запрос GET к конечной точке API и локально сохраняет ответ. Он также создает структуру каталогов, если она не существует:
import json import platform import pathlib import configparser import requests
env = "dev" if platform.system().lower() == "darwin" else "prod" config = configparser.ConfigParser() config.read("config.ini")
def get_users() -> dict: r = requests.get(config[env]["api_url"]) return r.text
def save_users(users: dict) -> None: path = pathlib.Path(config[env]["save_dir"]) if not path.exists(): path.mkdir()
with open(f"{config[env]['save_dir']}/{config[env]['save_file']}", "w") as f: json.dump(users, f)
if __name__ == "__main__": users = get_users() save_users(users=users)
Ниже вы увидите содержимое каталога users_data
:
И вот как вы можете интегрировать файлы конфигурации ini
в свои проекты Python. Далее сделаем краткий обзор.
Сводка файлов конфигурации .ini с ConfigParser в Python
Жесткое кодирование значений в приложениях Python — это всегда ужасная идея. Легко изменить пару вещей в одном файле, но представьте, что у вас их сотни. Гарантировано, что вы пропустите пару мест и создадите головную боль себе и всем, с кем вы работаете.
Сегодня вы узнали, как работать с ini
файлами конфигурации в Python. Вся установка настолько проста, насколько это возможно, но это не универсальное решение. Например, вы не можете использовать программную логику в .ini
файлах. Этот недостаток легко устраняется с помощью файлов Python для настройки. Оставайтесь с нами, если хотите узнать об этом больше.
Понравилась статья? Станьте участником Medium, чтобы продолжать обучение без ограничений. Я получу часть вашего членского взноса, если вы перейдете по следующей ссылке, без каких-либо дополнительных затрат с вашей стороны.
Рекомендуемые чтения
- 5 лучших книг для изучения основ науки о данных (математика, статистика и программирование)
- 5 лучших книг для изучения науки о данных в 2022 году
- Файлы конфигурации JSON в Python
Оставайся на связи
- Наймите меня как технического писателя
- Подпишитесь на Ютуб
- Подключиться в LinkedIn
Первоначально опубликовано на https://betterdatascience.com 19 апреля 2022 г.