【发布时间】:2012-01-21 11:36:49
【问题描述】:
我正在编写一个 Python 类来对流程进行建模,并且我想从文件中初始化参数,例如 'input.dat'。输入文件的格式如下所示。
'input.dat'文件:
Z0: 0 0
k: 0.1
g: 1
Delta: 20
t_end: 300
我写的代码如下。它有效,但显得多余且不灵活。有没有更好的方法来完成这项工作?比如循环做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
【问题讨论】:
-
我发现任何一天的初始格式化都比解析要好。在实践中已经改变了格式以更好地与 python 交互。如果你可以改变你的 input.dat,让它看起来更像是一个漂亮的 python 字典,你可以吸进整个 glob 并在它上面运行 eval()。所以在开头和结尾加上括号,在字符串周围加上引号,你会更开心!
-
@pyInTheSky:是的。不要
eval()配置文件。使用安全的东西,例如JSON或ConfigParser。 -
@Tim,基于 Python 的配置文件在某些情况下非常很有用,请参阅我的回答,例如:stackoverflow.com/a/8527168/68707
-
@Tim 当然 json 也可以。而且to nos :: json格式和python dict格式差不多,所以你可以导入json,做json.loads(file.read()),很快就能得到你想要的。
标签: python file serialization input