
Файлы формата CFG используются для хранения конфигураций приложений и игр в текстовом виде с разделением на секции и ключи. В Python для работы с такими файлами чаще всего применяется модуль configparser, который позволяет читать, изменять и создавать конфигурационные файлы без необходимости разбирать их вручную.
Структура типичного CFG файла включает секции в квадратных скобках, ключи с присвоенными значениями и возможные комментарии, начинающиеся с символов # или ;. Использование configparser обеспечивает безопасное преобразование строк в числовые или логические типы и поддерживает многократное считывание значений из одной секции.
Для загрузки конфигурации достаточно создать объект ConfigParser(), вызвать метод read() с указанием пути к файлу и использовать get() или items() для получения данных. Модуль также поддерживает запись изменений обратно в файл с сохранением структуры и комментариев, что упрощает автоматизацию настройки приложений.
Работа с CFG через Python позволяет не только извлекать параметры, но и проводить валидацию значений, проверять наличие обязательных ключей и динамически подстраивать настройки под разные среды выполнения, что особенно полезно при разработке скриптов и серверных приложений.
Установка и импорт модуля configparser для работы с cfg

Модуль configparser входит в стандартную библиотеку Python начиная с версии 3.2, поэтому отдельная установка через pip не требуется. Для использования необходимо выполнить импорт в начале скрипта:
import configparser
Если проект использует виртуальное окружение, убедитесь, что активирована корректная версия Python. Для проверки версии выполните:
python --version
Для проектов на Python ниже 3.2 или при необходимости поддержки старого кода можно установить совместимую библиотеку через pip:
pip install configparser
После импорта создается объект ConfigParser, который предоставляет методы для чтения, изменения и сохранения конфигурационных файлов:
config = configparser.ConfigParser()
Рекомендуется использовать явное указание кодировки при работе с cfg, чтобы избежать проблем с символами в различных системах:
config.read('settings.cfg', encoding='utf-8')
Импорт и создание объекта ConfigParser – единственные обязательные шаги для начала работы с cfg-файлами в Python. Остальные функции модуля доступны через методы read(), get(), set() и write().
Чтение секций и ключей из cfg файла через Python

Для работы с cfg файлами в Python применяется модуль configparser. Он позволяет загружать файл, получать список секций и ключей, а также извлекать значения с сохранением типов данных.
Пример базовой загрузки файла и получения секций:
import configparser
config = configparser.ConfigParser()
config.read('settings.cfg', encoding='utf-8')
sections = config.sections()
print(sections)
Для чтения ключей конкретной секции используется метод options(), а значения извлекаются через get():
keys = config.options('Database')
for key in keys:
value = config.get('Database', key)
print(f"{key} = {value}")
Если значение должно быть числом или логическим типом, применяются методы getint(), getfloat(), getboolean():
port = config.getint('Database', 'port')
debug_mode = config.getboolean('Settings', 'debug')
Для наглядного представления содержимого cfg файла можно использовать таблицу:
| Секция | Ключ | Значение |
|---|---|---|
| Database | host | localhost |
| Database | port | 5432 |
| Settings | debug | True |
| Settings | timeout | 30 |
Метод items() позволяет получить все пары ключ-значение одной секции в виде списка кортежей:
for key, value in config.items('Settings'):
print(f"{key}: {value}")
При работе с большими cfg файлами рекомендуется проверять наличие секции через has_section() и ключа через has_option(), чтобы избежать исключений:
if config.has_section('Logging') and config.has_option('Logging', 'level'):
log_level = config.get('Logging', 'level')
Получение значений с разными типами данных из конфигурации
В Python для работы с CFG-файлами чаще всего используют модуль configparser. Он позволяет извлекать значения с конкретными типами, избегая ручного преобразования.
Для строк используется метод get(section, option). Пример:
username = config.get('User', 'name')
Для целых чисел применяют getint(section, option). Этот метод сразу конвертирует значение в int и выбрасывает исключение ValueError, если формат некорректен:
max_retries = config.getint('Settings', 'retries')
Для чисел с плавающей точкой используют getfloat(section, option). Рекомендуется проверять, что в файле не содержатся лишние пробелы:
timeout = config.getfloat('Network', 'timeout')
Для логических значений существует getboolean(section, option). Поддерживаются yes/no, true/false, 1/0. Пример:
debug_mode = config.getboolean('Debug', 'enabled')
Если требуется получить значение как список, стандартный configparser этого не делает автоматически. Нужно использовать разделитель и метод split():
hosts = config.get('Network', 'hosts').split(',')
Для безопасного получения значений можно использовать метод fallback, который возвращает заданное значение при отсутствии ключа:
port = config.getint('Network', 'port', fallback=8080)
Такой подход минимизирует ошибки приведения типов и делает код надежным и читаемым.
Изменение и добавление новых параметров в cfg файл
Для изменения или добавления параметров в cfg файл в Python рекомендуется использовать модуль configparser. Он поддерживает чтение, запись и сохранение конфигураций в стандартном INI-формате.
Пример последовательности действий:
- Импорт модуля и загрузка файла:
import configparser
config = configparser.ConfigParser()
config.read('settings.cfg')
- Изменение существующего параметра:
Чтобы изменить значение, необходимо указать секцию и ключ:
config['UserSettings']['theme'] = 'dark'
После изменения требуется сохранить файл:
with open('settings.cfg', 'w') as configfile:
config.write(configfile)
- Добавление нового параметра:
Если ключа не существует, его можно создать:
config['UserSettings']['font_size'] = '14'
Для добавления новой секции сначала проверяем её наличие:
if 'Advanced' not in config:
config.add_section('Advanced')
Затем добавляем параметры:
config['Advanced']['cache_enabled'] = 'true'
- Особенности работы с числами и логическими значениями:
- Все значения сохраняются как строки. Для чисел и булевых значений используйте преобразование при чтении:
int(config['Section']['param']),config.getboolean('Section', 'param'). - При частых изменениях файла рекомендуется использовать
config.read_dict()для предварительной подготовки структуры данных.
Использование configparser обеспечивает совместимость с большинством приложений, работающих с cfg-файлами, и позволяет управлять параметрами без прямого редактирования текста вручную.
Сохранение изменений в cfg файл после редактирования
После внесения изменений в объект ConfigParser важно корректно сохранить их в исходный cfg файл, чтобы структура и кодировка оставались неизменными.
Пример пошагового сохранения:
- Открыть файл для записи с явным указанием кодировки, например UTF-8:
- Использовать метод
write()объекта ConfigParser: - Закрытие файла происходит автоматически через контекстный менеджер
with.
with open('config.cfg', 'w', encoding='utf-8') as configfile:
config.write(configfile)
Для сохранения только изменённых секций можно использовать фильтрацию перед записью:
for section in config.sections():
if config.has_option(section, 'изменённый_параметр'):
config.write(configfile)
Рекомендации по сохранению:
- Всегда создавайте резервную копию cfg файла перед записью, чтобы избежать потери данных.
- Сохраняйте одинаковую кодировку, особенно при работе с кириллицей.
- Если файл содержит комментарии, ConfigParser их не сохраняет по умолчанию – используйте сторонние библиотеки, например
configobj, для сохранения комментариев. - Для массового редактирования нескольких файлов используйте цикл с отдельным открытием каждого файла, избегая одновременной записи в несколько файлов через один объект ConfigParser.
Обработка ошибок при отсутствии секций или ключей
При работе с cfg-файлами в Python чаще всего используется модуль configparser. Если запрашиваемая секция отсутствует, вызов config.get('секция', 'ключ') генерирует исключение configparser.NoSectionError. Для ключей отсутствующего значения используется configparser.NoOptionError.
Для безопасного чтения рекомендуется проверять наличие секции и ключа через has_section() и has_option(). Например: if config.has_section('database') and config.has_option('database', 'host'). Это предотвращает выброс исключений и позволяет задавать значения по умолчанию.
При необходимости обработки исключений целесообразно использовать блок try-except. Пример: try: host = config.get('database', 'host') except (configparser.NoSectionError, configparser.NoOptionError): host = 'localhost'. Такой подход гарантирует, что программа не прервется и будут использованы безопасные значения.
Для массовой загрузки настроек удобнее применять функцию с возвратом словаря: она проверяет секцию и ключи, подставляет стандартные значения и логирует пропущенные элементы. Это упрощает отладку и снижает риск ошибок при изменении структуры cfg.
Использование метода getint(), getfloat() и getboolean() требует отдельной проверки ключа, иначе NoOptionError возникнет до преобразования типа. Рекомендуется комбинировать has_option() и обработку исключений для числовых и логических параметров.
Для сложных конфигураций с большим количеством секций целесообразно создать универсальную обертку вокруг ConfigParser, которая централизованно управляет отсутствующими секциями и ключами, подставляет дефолтные значения и формирует подробный отчет о пропущенных параметрах.
Для обработки конфигурационного файла формата CFG удобно использовать модуль configparser, входящий в стандартную библиотеку Python. Предположим, файл settings.cfg содержит несколько секций с ключами и значениями:
[database] host = localhost port = 5432 user = admin password = secret [server] host = 0.0.0.0 port = 8080 debug = true
import configparser
config = configparser.ConfigParser()
config.read('settings.cfg')
for section in config.sections():
print(f"[{section}]")
for key, value in config.items(section):
print(f"{key} = {value}")
print()
Результат выполнения скрипта покажет каждую секцию и все пары ключ-значение:
[database] host = localhost port = 5432 user = admin password = secret [server] host = 0.0.0.0 port = 8080 debug = true
Для конфигураций с потенциально чувствительными данными рекомендуется использовать os.environ или шифрование для хранения паролей. Если требуется модификация настроек, config.set(section, key, value) позволяет обновлять значения перед сохранением в файл через config.write().
Такой подход обеспечивает полное чтение, структурированное отображение и безопасное управление параметрами из cfg-файлов в Python.
Вопрос-ответ:
Что такое cfg файл и зачем его парсить в Python?
CFG файл — это текстовый файл конфигурации, который обычно содержит настройки для программы или приложения. Его структура напоминает INI-файл: есть секции, ключи и значения. Парсинг таких файлов в Python позволяет автоматически получать эти значения, изменять их и использовать внутри кода без ручного редактирования, что упрощает работу с настройками и делает программу более гибкой.
Какие стандартные библиотеки Python подходят для чтения cfg файлов?
Для работы с cfg файлами часто используют модуль configparser. Он умеет считывать файл, разбивать его на секции, ключи и значения, а также позволяет изменять их и сохранять обратно. Использование этой библиотеки удобно для файлов, где структура понятна и предсказуема, а синтаксис не содержит сложных конструкций вроде вложенных списков или специальных форматов.
Что делать, если cfg файл имеет нестандартный формат или содержит комментарии?
Если структура файла отличается от привычного INI или содержит необычные комментарии, стандартный configparser может не справиться. В таких случаях можно использовать обычное чтение строк через open и обработку через регулярные выражения или методы строк. Это позволяет гибко обрабатывать любой текстовый формат, хотя потребует написания дополнительных проверок и логики разбора данных.
