Копирование недостающих данных из одного файла конфигурации в другой

#python #config

#python #конфигурация

Вопрос:

У меня есть программа, которая использует файл конфигурации из локального каталога пользователей. Если в локальном файле конфигурации отсутствует какой-либо раздел или имя, я хочу обновить локальный файл конфигурации из файла конфигурации проекта. Следует добавить только отсутствующий раздел или значение имени, если существует существующее значение имени, его не следует изменять.

Локальный файл:

 [PowerPoint]
template = ppt Template.pptx
title info = User
Image directory = C:/Users/Someone/Desktop/here/

[Ecal]
CalculateEField = False
CalculateEcfromI = False
OutputPVonly = False
  

Файл проекта

 [PowerPoint]
template = ppt Template.pptx
Title = Copy this
lot = Copy this too
title info = User2
Image directory = C:/Users/Someone_else/HomePC/nothere/

[Ecal]
CalculateEField = False
CalculateEcfromI = False
OutputPVonly = False

[New Section]
do nothing = okay
  

Результат после копирования: локальный файл

 [PowerPoint]
template = ppt Template.pptx
Title = Copy this
lot = Copy this too
title info = User
Image directory = C:/Users/Someone/Desktop/here/

[Ecal]
CalculateEField = False
CalculateEcfromI = False
OutputPVonly = False

[New Section]
do nothing = okay
  

Обратите внимание, что существующее значение в локальном файле не изменяется. Любая дополнительная пара имя-значение должна быть добавлена в том же разделе, что и в файле конфигурации проекта.

Я пытался использовать анализатор конфигурации на python, но пока безуспешно. Я очень признателен, если кто-нибудь может указать мне правильное направление.

Комментарии:

1. просто прочитайте оба файла и позвольте одному файлу переопределить значения из другого файла

2. Можете ли вы показать код, который вы написали до сих пор?

Ответ №1:

ConfigParser выдаст вам результаты, указанные выше. Порядок чтения файлов имеет значение, существующие значения будут заменены на те, которые будут прочитаны позже.

 import configparser

cf = configparser.ConfigParser()

# Values from 'local' overwrite those from 'project'
cf.read(['project.ini', 'local.ini']) 

# Write combined config to file.
with open('result.ini', 'w') as f:
    cf.write(f)