編輯後的配置文件部分無法讀取包含[]
我不能夠讀取包含[]
配置文件節......對於例如,如果在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