我似乎遇到了一个不会感觉问题的问题,但我无法看到解决方案,也许其他人可以。
我使用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实例时是否存在冲突?我真的不明白为什么它不起作用。 抱歉,如果我错过了一些信息,盯着这个太久了。任何帮助表示赞赏。
答案 0 :(得分:1)
代码没问题!只是你的.ini文件有问题。
删除main.ini
内的引号。
[topic_name1]
file_name = configSetupFiles/topic_name1.ini
[topic_name2]
file_name = configSetupFiles/topic_name2.ini