Pythonic从配置文件中读取

时间:2010-04-11 09:32:36

标签: python coding-style configparser dry

我有一个python类,它使用ConfigParser读取配置文件:

配置文件:

[geography]
Xmin=6.6
Xmax=18.6
Ymin=36.6
YMax=47.1

Python代码:

class Slicer:
    def __init__(self, config_file_name):
        config = ConfigParser.ConfigParser()
        config.read(config_file_name)
        # Rad the lines from the file
        self.x_min = config.getfloat('geography', 'xmin')
        self.x_max = config.getfloat('geography', 'xmax')
        self.y_min = config.getfloat('geography', 'ymin')
        self.y_max = config.getfloat('geography', 'ymax')

我觉得最后四行是重复的,并且应该以某种方式压缩到一个Pythonic行,这将为该部分中的每个项目创建一个self.item变量。

有什么想法吗?

亚当

更新

根据您的回答,我已将我的代码修改为:

    for item in config.items('geography'):
        setattr(self, '_'+item[0], float(item[1]))

现在,

   print self.__dict__
   >>> {'_xmax': 18.600000000000001, '_ymax': 47.100000000000001, 
        '_ymin': 36.600000000000001, '_xmin': 6.5999999999999996}

3 个答案:

答案 0 :(得分:5)

我通常会尝试避免构造函数中的外部交互 - 这使得测试代码变得困难。更好地传递配置解析器实例或类似fp的对象而不是文件名。

答案 1 :(得分:3)

for line in ['x_min', 'x_max', 'y_min', 'y_max']:

   setattr(self, line, config.getfloat('geography', line.replace('_', '')))

答案 2 :(得分:1)

如下:

for key in ['xmin','xmax','ymin','ymax']:
    self.__dict__[key] = config.getfloat('geography',key);

请注意,上面将它分配给self.xmin而不是self.x_min ...但是,如果您对该命名没有问题,那么这应该有效...否则,名称之间的映射将比代码更多原始