从Python中的文件加载参数

nos*_*nos 12 python serialization file input

我正在编写一个Python类来为进程建模,我想从文件中初始化参数,比方说'input.dat'.输入文件的格式如下所示.

'input.dat' 文件:

Z0: 0 0
k: 0.1
g: 1
Delta: 20
t_end: 300
Run Code Online (Sandbox Code Playgroud)

我写的代码如下.它有效但看起来多余且不灵活.有没有更好的方法来完成这项工作?比如循环做readline()然后匹配关键字?

def load(self,filename="input.dat"):
    FILE = open(filename)
    s = FILE.readline().split()
    if len(s) is 3:
        self.z0 = [float(s[1]),float(s[2])] # initial state
    s = FILE.readline().split()
    if len(s) is 2:
        self.k = float(s[1])    # kappa
    s = FILE.readline().split()
    if len(s) is 2:
        self.g = float(s[1])
    s = FILE.readline().split()
    if len(s) is 2:
        self.D = float(s[1])    #  Delta
    s = FILE.readline().split()
    if len(s) is 2:
        self.T = float(s[1])    # end time
Run Code Online (Sandbox Code Playgroud)

Ben*_*oyt 19

假设params来自一个安全的地方(由您或用户制作,而不是互联网),只需将参数文件设为Python文件,即params.py:

Z0 = (0, 0)
k = 0.1
g = 1
Delta = 20
t_end = 300
Run Code Online (Sandbox Code Playgroud)

然后在您的代码中,您只需要:

import params
fancy_calculation(10, k=params.k, delta=params.Delta)
Run Code Online (Sandbox Code Playgroud)

这样做的好处有两方面:1)简单,2)你可以在参数描述中使用Python的强大功能 - 在这里特别有用,例如:

k = 0.1
Delta = 20
g = 3 * k + Delta
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用Python的内置JSONConfigParser .INI解析器模块.


day*_*mer 16

  • 如果你对其他类型的文件开放,你可以保留你的参数,我建议你使用YAML文件.
  • python lib是PyYAML 是你可以轻松地使用Python的方法
  • 有关更好的介绍,请查看Wiki文章:http://en.wikipedia.org/wiki/YAML
  • 好处是您可以将参数值读取为列表,地图
  • 你会喜欢的!