Краткое руководство по чтению, записи и обновлению файлов конфигурации с помощью configparser в Python
Вы пишете программу глубокого обучения и хотите сохранить некоторые ключевые параметры в файле конфигурации. Вы хотите использовать значения в конфигурации в качестве значений параметров для обучения модели, таких как путь к набору данных, оптимизатор, скорость обучения, количество эпох и т. Д.
Класс configparser реализует базовую структуру конфигурации, имеющую разделы, содержащие пары ключ-значение.
Файл конфигурации можно прочитать, а также можно записать или обновить новые параметры конфигурации.
Создание ini-файла для хранения настроек конфигурации
Вы можете использовать любой текстовый редактор для создания ini-файла. Я использовал блокнот.
- Файл конфигурации состоит из [раздела], за которым следует пара "ключ-значение". значения отделяются от ключей с помощью «=» или «:»
- Имена разделов чувствительны к регистру, но ключи - без учета регистра.
- Ключи могут содержать или не содержать значения. Если значения для ключей отсутствуют, убедитесь, что вы добавили «:» или «=», иначе вы получите сообщение об ошибке.
- Перед ключами и значениями могут быть пробелы перед и после, поскольку они удаляются при чтении файла конфигурации.
- Значения ключа могут быть распределены по нескольким строкам с правильным отступом. Если значение ключа, которое распространяется на несколько строк, имеет неправильный отступ, мы получаем ошибку.
Чтение данных конфигурации из ini-файла
Чтобы прочитать файл конфигурации, вам потребуется импортировать библиотеку configparser. Приведенный ниже код считывает файл конфигурации, печатает все разделы вместе с парами "ключ-значение" в каждом разделе.
import configparser filename=r'test_config.ini' config = configparser.ConfigParser() config.read(filename) for sect in config.sections(): print("\nSection: ",sect) for k,v in config.items(sect): print("Key: ",k," Value: ",v)
Прочтите одно значение ключа из файла конфигурации.
При обучении модели вам может потребоваться извлечь одно значение ключа из файла конфигурации или извлечь все значения ключей в разделе.
Извлечение значения ключа оптимизатора в разделе обучения
print(config['training']['optimizer'])
Извлечение значения ключа эпох в разделе обучения и преобразование его в int
print(int(config['training']['epochs']))
Извлечение всех разделов из файла конфигурации
Разделы файла конфигурации будут возвращены в виде списка.
print(list(config.sections()))
Извлечение всех ключей из определенного раздела файла конфигурации
Мы извлекаем все ключи в разделе обучения.
print(list(config['training'].keys()))
Извлечение всех значений из определенного раздела файла конфигурации
Мы извлекаем все значения для всех ключей в разделе обучения.
print(list(config['training'].values()))
Обновление значений ключей в разделе
Обновление значений ключей в существующем разделе аналогично перезаписи значений.
filename=r'test_config.ini' config = configparser.ConfigParser() config.read(filename) # the section checkpoint uppdate the value for model_file_name config['Trained Model Details']={'model_file_name' :'classfication_epoch100.h5'} with open(filename, 'w') as configfile: config.write(configfile)
Раздел «Подробная информация об обученной модели» обновляется значением «classfication_epoch100.h5», а ключ для «контрольной точки» удаляется.
Напишите дополнительные записи в файл конфигурации.
Есть два разных способа записи конфигурационных записей в файл.
- Создайте словарь пар "ключ-значение" с названием раздела
#Adding additional entries into Config file # creating the dictionary for section and key-value pairs config['Layer 1']={ 'no of hidden units':8, 'kernel_size':3, 'stride':2, 'activation':'relu' } # writing to configuration file with open(filename, 'w') as configfile: config.write(configfile)
Этот код будет добавлен к существующему файлу конфигурации, как показано ниже.
Если вы создаете экземпляр configparser, он перезаписывает текущие записи, как показано ниже.
#Overwriting over existsing entries into Config file filename=r'test_config.ini' config = configparser.ConfigParser() config['Layer 1']={ 'no of hidden units':10, 'kernel_size':3, 'stride':2, 'activation':'relu' } with open(filename, 'w') as configfile: config.write(configfile)
Другой метод - использовать read_dict (), у него есть параметр конфигурации в объекте словаря, где ключ - это имя раздела, а различные пары ключ-значение - значения. словаря.
config.read_dict({'data':{'train_dir' : r'c:\dataset\train', 'test_dir': r'c:\dataset\test', 'val_dir': r'c:\dataset\val' } }) with open(filename, 'w') as configfile: config.write(configfile)
Приведенный выше код не добавил еще один раздел в наш файл конфигурации.
Базовая интерполяция ценностей
Интерполяция - это когда значение ключей в файлах конфигурации предварительно обрабатывается перед их возвратом.
Синтаксис базовой интерполяции :% (key_name)
Приведенный ниже код создает раздел конфигурации «Пути», содержащий два ключа «home_dir,» и «model_dir». Значение для ключ «model_dir» будет создан заменой «home_dir» с помощью интерполяции.
config['Paths']={ 'home_dir' : r'C:\model', 'model_dir': '%(home_dir)s\dataset'} with open(filename, 'w') as configfile: config.write(configfile) print(config["Paths"]['model_dir'])
Расширенная интерполяция
Расширенная интерполяция предназначена для предварительной обработки и замены значений ключа из другого раздела файла конфигурации перед их возвратом.
Синтаксис расширенной интерполяции : $ {section: key}
В приведенном ниже коде используется расширенная интерполяция из ключа «home_dir» раздела «Пути».
config['Data_Path']={'train_dir' : '${Paths:home_dir}\\train', 'test_dir':'${Paths:home_dir}s\\test', 'val_dir':'${Paths:home_dir}s\\val' } with open(filename, 'w') as configfile: config.write(configfile)
Чтобы прочитать расширенную интерполяцию, нам нужно установить интерполяцию файла конфигурации на ExtendedInterpolation () для динамической замены.
config._interpolation = configparser.ExtendedInterpolation() config.read('test_config.ini') print(config["Data_Path"]['train_dir'])
Заключение:
Библиотека configparser предоставляет простой способ управления параметрами конфигурации с помощью пар ключ-значение в разделе.
Использованная литература:
Https://docs.python.org/3/library/configparser.html#configparser.ConfigParser