Использование специальной библиотеки намного надежнее.Особенно по сравнению с положением строк, появляющихся непрерывно.
Вот короткий скрипт, написанный на Python.Было бы тривиально добавить тесты для определенных разделов и атрибутов, которые будут игнорироваться или проходить без изменений.
Использование входного файла new.ini
:
$ cat test.ini
[header1]
attribute1 = 10
attribute2 = 12
[header2]
attribute1 = 23
attribute2 = 25
и сценария transform_ini.py
:
$ cat ini.py
#!/usr/bin/python3
import configparser
config = configparser.ConfigParser()
new_config = configparser.ConfigParser()
new_key = 'new_attribute'
config.read('test.ini')
for section in config.sections():
val = 0
for key in config[section]:
val += int(config[section][key])
new_config[section] = {}
new_config[section][new_key] = str(val)
with open('new.ini', 'w') as configfile:
new_config.write(configfile)
результат равен new.ini
:
$ cat new.ini
[header1]
new_attribute = 22
[header2]
new_attribute = 48
Скрипт поддерживает Mapping Protocol Access и, следовательно, требует Python 3.2 или выше.Я не использую getint()
, потому что он, кажется, классифицируется как часть устаревшего API.
Обратите внимание, что ConfigParser.read()
закрывает входной файл для вас .