解析一个配置文件 Python 有多个同名变量
Parse a config-file with Python having more then one variable with the same name
有没有办法用 Python3 解析这样的配置文件?
path = .MyAppData
prefer = newer
path = Dokumente
请不要怪我。 ;) 我没有像这样构建生成配置文件的软件。但在那种特殊情况下它们是有意义的。
我知道 ConfigParser
和 configobj
用于 Python3,但没有办法做到这一点。
ConfigParser
初始化程序支持 strict=False
参数,它允许重复。但是据我所知,文档中没有提到在这种情况下保留哪个值。
一个简单的解决方案是自己将行转换成字典;
In [1]: txt = '''path = .MyAppData
...: prefer = newer
...: path = Dokumente'''
In [2]: txt.splitlines()
Out[2]: ['path = .MyAppData', 'prefer = newer', 'path = Dokumente']
(将文本拆分成行后,您可能希望过滤掉注释和空行。)
In [3]: [ln.split('=') for ln in txt.splitlines()]
Out[3]: [['path ', ' .MyAppData'], ['prefer ', ' newer'], ['path ', ' Dokumente']]
In [4]: vars = [ln.split('=') for ln in txt.splitlines()]
(此时您可能想为内部列表添加一个过滤器,以便您只有长度为 2 的列表,表示拆分成功。)
In [5]: {a.strip(): b.strip() for a, b in vars}
Out[5]: {'path': 'Dokumente', 'prefer': 'newer'}
在字典理解中(在 [5] 中),后面的赋值将覆盖前面的赋值。
当然,如果prefer = older
,你必须在字典理解之前反转行。
有没有办法用 Python3 解析这样的配置文件?
path = .MyAppData
prefer = newer
path = Dokumente
请不要怪我。 ;) 我没有像这样构建生成配置文件的软件。但在那种特殊情况下它们是有意义的。
我知道 ConfigParser
和 configobj
用于 Python3,但没有办法做到这一点。
ConfigParser
初始化程序支持 strict=False
参数,它允许重复。但是据我所知,文档中没有提到在这种情况下保留哪个值。
一个简单的解决方案是自己将行转换成字典;
In [1]: txt = '''path = .MyAppData
...: prefer = newer
...: path = Dokumente'''
In [2]: txt.splitlines()
Out[2]: ['path = .MyAppData', 'prefer = newer', 'path = Dokumente']
(将文本拆分成行后,您可能希望过滤掉注释和空行。)
In [3]: [ln.split('=') for ln in txt.splitlines()]
Out[3]: [['path ', ' .MyAppData'], ['prefer ', ' newer'], ['path ', ' Dokumente']]
In [4]: vars = [ln.split('=') for ln in txt.splitlines()]
(此时您可能想为内部列表添加一个过滤器,以便您只有长度为 2 的列表,表示拆分成功。)
In [5]: {a.strip(): b.strip() for a, b in vars}
Out[5]: {'path': 'Dokumente', 'prefer': 'newer'}
在字典理解中(在 [5] 中),后面的赋值将覆盖前面的赋值。
当然,如果prefer = older
,你必须在字典理解之前反转行。