使用ConfigParser读取非标准配置文件

时间:2017-03-03 12:38:10

标签: python python-2.7 configparser

我有一个

形式的配置文件
# 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

2 个答案:

答案 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文件。

  • 阅读conf文件并进行修改。
  • 生成有效的配置文件。