我有一个
形式的配置文件# foo.conf
[section1]
foo=bar
buzz=123
[section2]
line1
line2
line3
我想使用Python ConfigParser
库进行解析。请注意,section2
不包含键/值对,而是包含一些原始文本。我希望有可能将section2
的所有(原始)内容读取到变量中。
ConfigParser
是否允许我阅读此文件,或者是否可以轻松地将其中一个类子类化为子类?
使用标准
import ConfigParser
config = ConfigParser.ConfigParser()
config.read('foo.conf')
收益ConfigParser.ParsingError: File contains parsing errors: foo.conf
答案 0 :(得分:1)
您可以尝试使用io适配器以适合ConfigParser的格式转换输入文件。一种方法是转换既不是空行也不是注释行的普通线,也不转换TextField
中没有key=value
行的截面线,其中i在每一行增加并从每一行开始为1部分。
可能的代码可能是:
linei=original_line
这样,您可以使用当前文件而不更改其中的任何内容:
class ConfParsAdapter(io.RawIOBase):
@staticmethod
def _confParsAdapter(fd):
num=1
rxsec = re.compile('\[.*\]( *#.*)?$')
rxkv = re.compile('.+?=.*')
rxvoid = re.compile('(#.*)?$')
for line in fd:
if rxsec.match(line.strip()):
num=1
elif rxkv.match(line) or rxvoid.match(line.strip()):
pass
else:
line = 'line{}={}'.format(num, line)
num += 1
yield(line)
def __init__(self, fd):
self.fd = self._confParsAdapter(fd)
def readline(self, hint = -1):
try:
return next(self.fd)
except StopIteration:
return ""
答案 1 :(得分:0)
据我所知,ConfigParser不能这样做:
ConfigParser类实现基本配置文件解析器 提供类似于您所发现的结构的语言 Microsoft Windows INI文件。
您的conf文件似乎不是基本配置文件,因此可能有两种方法可以解析此conf文件。