Pythonic 从配置文件读取

2 投票
3 回答
656 浏览
提问于 2025-04-15 21:28

我有一个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')

我觉得最后四行代码有点重复,应该能压缩成一行更简洁的Python代码,这样可以为每个项目创建一个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 个回答

1

你可以试试这样的写法:

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

注意,上面的写法会把值赋给self.xmin,而不是self.x_min……不过,如果你觉得这个命名没问题,那这样就可以用了……否则,去处理这些名字之间的对应关系会比原来的代码还要多。

5

我通常会尽量避免在构造函数里进行外部操作,因为这样会让代码测试变得困难。与其传一个文件名,不如传一个配置解析器的实例或者一个类似函数式编程的对象。

3

这段代码的意思是……

首先,它定义了一些变量,这些变量可以用来存储信息。接着,它会执行一些操作,比如计算、比较或者是处理数据。最后,它可能会输出一些结果,让我们看到这些操作的结果是什么。

在编程中,代码块就像是一个小工具箱,里面装着我们需要用到的工具。我们可以随时打开这个工具箱,拿出需要的工具来完成我们的任务。

总之,这段代码的目的是为了让计算机按照我们的指示去做事情,帮助我们解决问题或者完成某个任务。

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

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

撰写回答