我是一个Python菜鸟已经打了一下碰钉子的。 我需要导入配置文件,以使程序的工作。 我使用过程中的configparser但这里是我有问题,想不通。 我的配置文件将是这个样子
[Book1]
title = "Hello World"
status = "in"
location = "s2v14"
[Book2]
....
这将无限期地继续下去。 我的问题是我怎么解析配置文件,如果我不知道是什么节,甚至很多路段将如何存在。 这个程序的目的是让我当一本书状态从出在改变,也显示与部分相关联的所有其他数据接收消息。
典型地,一个使用一些类型的循环来处理一个未知的或可变数量的东西。 在这种情况下, 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('"')
另一种方法是将整个配置文件转换成一本词典此所示回答一个问题关于转换ConfigParser.items
成字典词典为后来可能会再次通过遍历使用的字典的内容进行处理for
循环。
对于配置文件与未知结构。
假设您已经加载的文件到一个解析器命名config
。
获取可用部分列表:
config.sections()
得知部分后,得到的键值对的列表:
config.items('Book1')
文件