我尝试分析文件,比如:

[account]
User = first

[account]
User = second

我在python中使用configparser,但是当我读取文件时:
Config = configparser.ConfigParser()
Config.read(file)
print (Config.sections())

我有错误:
While reading from ... : section 'account' already exists

如何解析此文件?还有别的图书馆吗?(首选蟒蛇3)

最佳答案

如果您希望简单地合并同名的部分(最新的一个部分获胜),只需将strict=False选项传递给构造函数(在python 3.2中添加)。
在合并重复部分时,您可以有效地获得dict.update()行为。

Config = configparser.ConfigParser(strict=False)

但是,从OP的示例数据中可以清楚地看到,相同命名的部分需要保持独立,以避免数据丢失。ConfigParser将读取的部分存储在字典中,因此它无法处理同名的多个部分。幸运的是,构造函数接受一个允许您指定类似字典的对象的dict_type参数。您可以使用它来支持同名的部分。这是一个简单的解决方案,它通过在以前看到节名时附加一个唯一的数字来管理节名。
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)

通过一点工作,你应该能够构建一个更清洁的解决方案。

10-06 01:43