Exy*_*Tab 10 python configparser python-3.x
我尝试解析文件,如:
[account]
User = first
[account]
User = second
Run Code Online (Sandbox Code Playgroud)
我在Python中使用ConfigParser,但是当我读取文件时:
Config = configparser.ConfigParser()
Config.read(file)
print (Config.sections())
Run Code Online (Sandbox Code Playgroud)
我有错误:
While reading from ... : section 'account' already exists
Run Code Online (Sandbox Code Playgroud)
我该如何解析这个文件?还有其他图书馆吗?(更喜欢python3)
ale*_*xis 18
如果你想要的只是简单地合并相同名称的部分(最新的一个胜利),只需将strict=False选项传递给构造函数(在Python 3.2中添加).您可以dict.update()在合并重复部分时有效地获取行为.
Config = configparser.ConfigParser(strict=False)
Run Code Online (Sandbox Code Playgroud)
但是,从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)
Run Code Online (Sandbox Code Playgroud)
通过一点点工作,您应该能够构建一个更清洁的解决方案.
| 归档时间: |
|
| 查看次数: |
8961 次 |
| 最近记录: |