我是一个有点障碍的蟒蛇菜鸟。我需要导入配置文件以使程序工作。我当然使用的是configparser,但这是我遇到的问题,无法弄清楚。我的配置文件看起来像这样
[Book1]
title = "Hello World"
status = "in"
location = "s2v14"
[Book2]
....
这将继续无限期。我的问题是如果我不知道该部分是什么,甚至不知道将存在多少部分,我如何解析配置文件。这个应用程序的目的是允许我在书籍状态从out更改为in时收到消息,并显示与该部分相关的所有其他数据。
答案 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')