编辑后的配置文件部分无法读取包含[]
我不能够读取包含[]
配置文件节......对于例如,如果在ini文件任何部分是一样的东西[c:\\temp\\foo[1].txt]
比我的脚本无法读取该节..
config.read(dst_bkp)
for i in config.sections():
config.get(i,'FileName')
感谢, 维涅什
编辑后的配置文件部分无法读取包含[]
我不能够读取包含[]
配置文件节......对于例如,如果在ini文件任何部分是一样的东西[c:\\temp\\foo[1].txt]
比我的脚本无法读取该节..
config.read(dst_bkp)
for i in config.sections():
config.get(i,'FileName')
感谢, 维涅什
假设你使用的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>.+)\]")
不过,我建议没有做任何的这些,避免支架代替。如果节标题中有括号,则配置文件可能不可移植。
发生这种情况是因为用于解析头的正则表达式 - 它只能走到第一个右括号。
您可以通过继承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')
什么是“节”? – nosklo 2010-08-10 11:50:40
请指出'config'是'ConfigParser.RawConfigParser'的子类的一个实例。 – Philipp 2010-08-10 12:15:13