无法读取包含 [] 的配置文件部分
编辑过的帖子
我无法读取配置文件中包含 []
的部分... 比如,如果 ini 文件中的某个部分是 [c:\\temp\\foo[1].txt]
这样的格式,我的脚本就无法读取这个部分了。
config.read(dst_bkp)
for i in config.sections():
config.get(i,'FileName')
谢谢,
Vignesh
2 个回答
1
这个问题发生是因为用来解析头部的正则表达式,它只会处理到第一个闭合的括号为止。
你可以通过创建一个新的类来解决这个问题,继承自 ConfigParser.ConfigParser
:
import ConfigParser
import re
class MyConfigParser(ConfigParser.ConfigParser):
SECTCRE = re.compile(
r'\[' # [
r'(?P<header>.+)' # even more permissive!
r'\]' # ]
)
config = MyConfigParser()
config.read(dst_bkp)
for i in config.sections():
config.get(i,'FileName')
3
假设你在使用 ConfigParser.RawConfigParser
模块的一个内置子类:这是不被支持的。即使在最新版本中,关于节标题的正则表达式也只是:
SECTCRE = re.compile(
r'\[' # [
r'(?P<header>[^]]+)' # very permissive!
r'\]' # ]
)
这里没有转义机制,节标题会在第一个闭合括号处结束。你应该只使用简单的字符串作为标题名称,避免使用像文件名那样的任意字符串,也就是说,不要用“特殊字符”。
编辑:关于 Python 3,相应的代码稍微进行了重新组织,但正则表达式是一样的:
_SECT_TMPL = r"""
\[ # [
(?P<header>[^]]+) # very permissive!
\] # ]
"""
编辑 2:你可以像其他解决方案中建议的那样,自己创建一个子类,或者直接修改 RawConfigParser
:
import ConfigParser
import re
ConfigParser.RawConfigParser.SECTCRE = re.compile(r"\[(?P<header>.+)\]")
不过,我建议你不要这样做,尽量避免使用括号。如果你的节标题中有括号,你的配置文件可能会变得不易移植。