Найти - Пользователи
Полная версия: Как в Python 2.7.13 изменить INI-файл с субсекциями?
Начало » Python для экспертов » Как в Python 2.7.13 изменить INI-файл с субсекциями?
1
xintrea
Имеется INI-файл с вот такой структурой:
...
[AC]
icon=battery-charging

[AC][DPMSControl]
idleTime=3600

[AC][HandleButtonEvents]
lidAction=64
powerButtonAction=8

[Battery]
icon=battery-060

[Battery][DPMSControl]
idleTime=300

[Battery][HandleButtonEvents]
lidAction=64
powerButtonAction=16

[LowBattery]
icon=battery-low

[LowBattery][BrightnessControl]
value=30

[LowBattery][HandleButtonEvents]
lidAction=64
powerButtonAction=16
...
Здесь видно, что HandleButtonEvents - это “субсекция”, а основная секция задается перед субсекцией в той же строке. Не знаю, является ли это стандартом для INI-файлов или нет, не я этот файл создавал.

Задача - поменять значения powerButtonAction в различных субсекциях.

Пробовал достучаться до нужного значения так (хотя бы считать):
import ConfigParser
config=ConfigParser.ConfigParser()
config.read('$fileName')

print( config.get('AC][HandleButtonEvents', 'powerButtonAction' ) )
Но возникает ошибка:
      "Traceback (most recent call last):",
" File \"<stdin>\", line 5, in <module>",
" File \"/usr/lib/python2.7/ConfigParser.py\", line 607, in get",
" raise NoSectionError(section)",
"ConfigParser.NoSectionError: No section: 'AC][HandleButtonEvents'"
Вопрос: как работать с такими файлами?

UPD: При необходимости могу поставить Python 3.5.3, если это будет нужно для решения.
PEHDOM
Не факт что именно такой конфиг конфигпарсер скушает. Вроде по документации он поддерживает только один уровень секций.
QSettings и configobj поддерживают несколько уровней, но там субсекции по другому определяются. Причем каждый по разному.

Возможно вам придеться писать свой конфигпарсеп с шариатом и гуриями для парсинга вот такого конфига.
py.user.next
xintrea
Здесь видно, что HandleButtonEvents - это “субсекция”, а основная секция задается перед субсекцией в той же строке. Не знаю, является ли это стандартом для INI-файлов или нет, не я этот файл создавал.
В INI-формате такого понятия нет. Если делаешь подсекции, то они являются секциями.

Ты пытаешься модулем для разбора INI-файлов разобрать то, что INI-файлом не является.

Парсер можно построить так:
1. Сначала ты данные эти приводишь к виду INI-файла
[AC][DPMSControl] -> [AC@@@DPMSControl]
2. Потом ты разбираешь этот INI-файл получившийся и меняешь его.
3. И потом ты восстанавливаешь INI-файл обратно в этот формат
[AC@@@DPMSControl] -> [AC][DPMSControl]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB