已编辑的帖子
我无法读取包含[]
的配置文件部分...例如,如果ini文件中的任何部分类似于[c:\\temp\\foo[1].txt]
,那么我的脚本无法读取该部分。
config.read(dst_bkp)
for i in config.sections():
config.get(i,'FileName')
谢谢, 维涅什
答案 0 :(得分:3)
假设您使用ConfigParser.RawConfigParser
模块的内置子类:这不受支持。即使在newest revision中,节标题的正则表达式也只是
SECTCRE = re.compile(
r'\[' # [
r'(?P<header>[^]]+)' # very permissive!
r'\]' # ]
)
没有转义机制,节标题只是在第一个右括号结束。您应该只使用没有“特殊字符”的简单字符串作为标题名称,而不是文件名之类的任意字符串。
编辑:关于Python 3,equivalent code已经重新组织了一下,但正则表达式是相同的:
_SECT_TMPL = r"""
\[ # [
(?P<header>[^]]+) # very permissive!
\] # ]
"""
编辑2 :您可以按照其他解决方案的建议制作自己的子类,也可以直接修补RawConfigParser
:
import ConfigParser
import re
ConfigParser.RawConfigParser.SECTCRE = re.compile(r"\[(?P<header>.+)\]")
但是,我建议不要做任何这些并避免使用括号。如果在节标题中有括号,则配置文件可能不可移植。
答案 1 :(得分: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')