python configparser 数组_如何从Python ConfigParser.items()中排除默认值?

我使用ConfigParser从配置文件加载数据,如下所示:

测试配置:[myfiles]

fileone: %(datadir)s/somefile.foo

filetwo: %(datadir)s/nudderfile.foo

加载.py:import ConfigParser

config = ConfigParser.ConfigParser({'datadir': '/tmp'})

config.read('test.conf')

print config.items('myfiles')

print config.get('myfiles', 'datadir')

输出:$ python load.py

[('datadir', '/tmp'), ('filetwo', '/tmp/nudderfile.foo'), ('fileone', '/tmp/somefile.foo')]

/tmp

我很惊讶变量替换的默认值('datadir', '/tmp')作为.items()和.get()返回的一部分出现,就好像它们是配置文件中的值一样。这种行为是预期的吗?任何解决方法,这样我就可以简单地迭代.items(),而不必在那里获取默认字典值,但仍然使用魔术插值?

谢谢!

更新:有人指出,这是预期的行为:默认值与配置文件中的任何其他名称/值对一样。类似地,配置文件中的名称/值对也可用于“magic interpolation”,因此如果我定义:foo: bar

zap: %(foo)snowl

我会得到[... ('zap': 'barnowl')]

这很不错,但我仍然想知道我是否能完成我想要完成的任务:在配置文件中迭代名称/值对,使用变量插值,而不使用默认值。

我的特定场景是这样的:我想用{basedir: '/foo/bar'}之类的东西初始化配置对象,因为到某些文件的绝对路径因安装而异。然后我需要将这个配置对象传递给其他类,并让其他类遍历这些文件。我不希望读取配置的每个类都知道它是用某些默认值初始化的,并且应该忽略它们,因为它们不是实际的文件。这可能吗?有什么方法可以隐藏.item()和.get()的默认值,但仍有插值?谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值