I try to parse file like:
[account]
User = first
[account]
User = second
I use ConfigParser in Python, but when i read file:
Config = configparser.ConfigParser()
Config.read(file)
print (Config.sections())
I have error:
While reading from ... : section 'account' already exists
How can i parse this file? Are any another library? (prefer for python3)
If what you want is to simply merge identically named sections (latest one wins), simply pass the strict=False
option to the constructor (added in Python 3.2).
You effectively get dict.update()
behavior as the duplicate sections are merged in.
Config = configparser.ConfigParser(strict=False)
However, it's clear from the OP's sample data that identically named sections need to be kept separate, to avoid loss of data. ConfigParser
stores the sections it reads in a dictionary, so it can't handle multiple sections with the same name. Fortunately the constructor accepts a dict_type
argument that allows you to specify a different dictionary-like object. You can use that to support identically named sections. Here's a crude solution that mangles the section names by appending a unique number whenever a section name has been seen before.
from collections import OrderedDict
class multidict(OrderedDict):
_unique = 0 # class variable
def __setitem__(self, key, val):
if isinstance(val, dict):
self._unique += 1
key += str(self._unique)
OrderedDict.__setitem__(self, key, val)
Config = configparser.ConfigParser(defaults=None, dict_type=multidict, strict=False)
With a little work you should be able to construct a cleaner solution.