如何从存储在另一个ini配置文件中的文件名打开ini配置文件?

时间:2016-02-21 23:57:13

标签: python configparser

我似乎遇到了一个不会感觉问题的问题,但我无法看到解决方案,也许其他人可以。

我使用ini文件存储我正在写的包的配置详细信息。此ini文件包含与其他ini文件相关的部分。

我知道有很多其他方法可以做到这一点,但我选择了这种方法,因为我喜欢配置设置有多清楚。理论上它应该很简单。

因此,在我的main.ini文件中,我有类似的内容:

[topic_name1]
file_name = 'configSetupFiles/topic_name1.ini'
[topic_name2]
file_name = 'configSetupFiles/topic_name2.ini'

然后在topic_name1.ini我有一个基本形式的设置,如:

[topic]
url = 'http://blah.com'
param1 = 10

[another_section]
href = 'x/y?z=yes'

topic_name2.ini遵循相同的格式。

所以我想做的就是:

#!/usr/bin/env python3
fromgent_epid configparser import SafeConfigParser
import os

iniparser = SafeConfigParser(os.environ)
config = {}
iniparser.read('main.ini')
for c in iniparser.sections():
    config[c] = iniparser.get(c, 'file_name')

for val in config.values():
    print(val) # prints file names without a problem
    inip = SafeConfigParser(os.environ)
    inip.read(val)
    for s in inip.sections():
        print("Section:", s)

我没有收到运行此错误的错误;它打印val,但没有任何其他迹象。当我在文件名中进行硬编码时,它打印没有问题。但是当我打印出topic_name ini文件部分的键时,我得到了一串键,如下所示:

url
param1
gdmsession
gpg_agent
xmodifiers
java_bindir
gtk_modules
ostype
xsession_is_up
cshedit
user
...

代码:

inip = SafeConfigParser(os.environ)
inip.read('configSetupFiles/topic_name1.ini')
for field in inip.sections():
    print(field)
    for k in inip[field]:
        print(k)

我想打印出密钥,因为每个文件中可能有不同的字段名称。部分所以我不能直接引用它们并使用.get

以这种方式创建第二个ConfigParser实例时是否存在冲突?我真的不明白为什么它不起作用。 抱歉,如果我错过了一些信息,盯着这个太久了。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

代码没问题!只是你的.ini文件有问题。

删除main.ini内的引号。

[topic_name1]
file_name = configSetupFiles/topic_name1.ini
[topic_name2]
file_name = configSetupFiles/topic_name2.ini