Работа со списками в ConfigParser Python: индексация, доступ
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для обработки списков в ConfigParser
рекомендуется использовать модуль json
. json.dumps(list)
поможет вам сохранить список, а json.loads(config_value)
— прочитать его.
Взгляните на пример:
import configparser, json
config = configparser.ConfigParser()
config['Example'] = {'numbers': json.dumps([1, 2, 3])}
with open('example.ini', 'w') as f:
config.write(f)
config.read('example.ini')
numbers = json.loads(config['Example']['numbers'])
Разбиение длинных списков
Списки большого объёма удобнее представлять, разбивая их на несколько строк. Такой подход упрощает чтение конфигурационных файлов, особенно с учётом того, что их размер может быть весьма значительным.
Вот пример:
import configparser, json
config = configparser.ConfigParser()
config['LongList'] = {
'many_numbers': json.dumps([
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20
])
}
with open('longlist.ini', 'w') as f:
config.write(f)
Универсальные значения по умолчанию
Секция [DEFAULT]
предназначена для задачи общих значений, используемых в различных разделах. Эта функция идеально подходит для установки значений по умолчанию для списков.
Пример:
[DEFAULT]
default_numbers = [1, 2, 3]
Организация списков внутри ConfigParser
Для хранения множества списков наиболее рациональным решением будет создание отдельных секций с уникальными парами ключ-значение. Для получения списка элементов используйте config.items("section_name")
.
Вот пример:
import configparser
config = configparser.ConfigParser()
config['Fruits'] = {'apples': 10, 'oranges': 20, 'bananas': 30}
config['Vegetables'] = {'carrots': 15, 'tomatoes': 25}
with open('grocery.ini', 'w') as f:
config.write(f)
fruits = config.items('Fruits')
Строки, структурированные с помощью разделителей
Для хранения списков можно использовать строки с разделителями. Нужно выбрать разделитель, который не будет встречаться в элементах списка, чтобы они корректно интерпретировались.
Пример:
config['Settings'] = {
'colors': 'red|green|blue'
}
colors = config['Settings']['colors'].split('|')
Визуализация
Списки в ConfigParser
можно представить в форме ящика с отделениями, где каждое отделение — это отдельный элемент списка:
Отделения ящика (🗄️): ['один', 'два', 'три']
В ConfigParser
, где нет встроенной поддержки списков, это будет выглядеть как одно единое отделение:
🗄️ Отделение: Один, Два, Три
Использование разделителей позволяет ConfigParser
правильно определить отдельные элементы списка:
🗄️ Улучшенное отделение: Один 🔸 Два 🔸 Три
Здесь каждый символ 🔸 является заменой запятой и помогает отделить записи друг от друга.
Расширенные альтернативы
YAML: Этот удобный и наглядный формат изначально поддерживает списки и сложные структуры данных.
Пользовательский парсер: Если структура настроек все увеличивается в сложности, можно создать собственный парсер, что позволит гибко удовлетворить уникальные требования.
Переменные окружения: В некоторых случаях данные, аналогичные спискам, проще контролировать с использованием переменных окружения, что упрощает процесс разработки.
Полезные материалы
- configparser — Парсер файлов конфигурации — Документация Python 3.12.2
- python – Списки в ConfigParser – Stack Overflow
- Проблема 11536: Неправильно написанные аргументы 2 – Трекер Python
- Python 101: Введение в ConfigParser – Mouse Vs Python
- 13.2. ConfigParser — Парсер файлов конфигурации — Документация Python 2.7.18
- configparser — Работа с файлами конфигурации — PyMOTW 3