解析未知长度的配置文件

时间:2014-06-14 02:03:36

标签: python parsing configuration-files

我是一个有点障碍的蟒蛇菜鸟。我需要导入配置文件以使程序工作。我当然使用的是configparser,但这是我遇到的问题,无法弄清楚。我的配置文件看起来像这样

[Book1]
title = "Hello World"
status = "in"
location = "s2v14"

[Book2]
....

这将继续无限期。我的问题是如果我不知道该部分是什么,甚至不知道将存在多少部分,我如何解析配置文件。这个应用程序的目的是允许我在书籍状态从out更改为in时收到消息,并显示与该部分相关的所有其他数据。

2 个答案:

答案 0 :(得分:2)

通常使用某种循环来处理未知或可变数量的事物。在这种情况下,可以使用由找到的节数控制的for循环,因为在ConfigParser实例对象读取并解析了文件后,它们及其数量都是已知的:

config = ConfigParser.ConfigParser()

with open('unknown.cfg') as cfg_file:
    config.readfp(cfg_file)  # read and parse entire file

for section in config.sections():
    print 'section:', section
    for option, value in config.items(section):
        print '  {}: {}'.format(option, value)

所以如果这是输入文件:

[Book1]
title = "Hello World"
status = "in"
location = "s2v14"
[Book2]
title = "Hello World II"
status = "out"
location = "s2v15"

这将是输出:

section: Book1
  title: "Hello World"
  status: "in"
  location: "s2v14"
section: Book2
  title: "Hello World II"
  status: "out"
  location: "s2v15"

请注意,您的字符串中包含实际的引号字符串分隔符,这些分隔符在您打印时可见...这不是在配置文件中存储字符串的常用方法。如果您无法更改配置文件的生成方式,那么根据您正在执行的操作,您可能需要在ConfigParser读入后手动删除它们对象(带value = value.strip('"'))。

另一种方法是将整个配置文件转换为字典,如此answer所示,转换为ConfigParser.items转换为字典字典的问题,之后可以通过循环处理字典再次处理字典'内容使用for循环。

答案 1 :(得分:0)

对于结构未知的配置文件。

假设您已将文件加载到名为config的解析器中。

获取可用部分的列表:

config.sections()

了解该部分后,获取键值对列表:

config.items('Book1')

documentation