我尝试分析文件,比如:
[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)
通过一点工作,你应该能够构建一个更清洁的解决方案。