Если вы хотите избавиться от конечного =
, вы можете создать подкласс ConfigParser.ConfigParser
в соответствии с предложением atomocopter и реализовать свой собственный метод write
для замены исходного:
import sys
import ConfigParser
class ConfigParserWithComments(ConfigParser.ConfigParser):
def add_comment(self, section, comment):
self.set(section, '; %s' % (comment,), None)
def write(self, fp):
"""Write an .ini-format representation of the configuration state."""
if self._defaults:
fp.write("[%s]\n" % ConfigParser.DEFAULTSECT)
for (key, value) in self._defaults.items():
self._write_item(fp, key, value)
fp.write("\n")
for section in self._sections:
fp.write("[%s]\n" % section)
for (key, value) in self._sections[section].items():
self._write_item(fp, key, value)
fp.write("\n")
def _write_item(self, fp, key, value):
if key.startswith(';') and value is None:
fp.write("%s\n" % (key,))
else:
fp.write("%s = %s\n" % (key, str(value).replace('\n', '\n\t')))
config = ConfigParserWithComments()
config.add_section('Section')
config.set('Section', 'key', 'value')
config.add_comment('Section', 'this is the comment')
config.write(sys.stdout)
Вывод этого скрипта:
[Section]
key = value
; this is the comment
Примечания:
- Если вы используете имя опции, имя которой начинается с
;
, а значение установлено на None
, это будет считаться комментарием.
- Это позволит вам добавлять комментарии и записывать их в файлы, но не читать их обратно. Для этого у вас будет свой собственный метод
_read
, который занимается анализом комментариев, и, возможно, добавите метод comments
, чтобы можно было получать комментарии для каждого раздела.