我在python 2.7.3上。我写了一个简单的代码来搜索字典键,当它找到由var_par
定义的键时,它会从列表array
迭代地替换它的新值:
var_par = 'B'
array = [1.4, 2.6, 4.8, 3.56]
params = {
"A": ["A part of", "#comment 1"],
"B": [1.2, "#comment 2"],
"C": ["the test run.", "#comment 3"]
}
for I in array:
if var_par in params: params[var_par][0] = I
execfile('script.py')
现在基本上我想做什么以及我的问题是:我想把我的params
字典放在一个单独的文件parameters.dat
中,然后做同样的事情,但是< em>物理更改B
定义的给定键的值(在本例中为var_par
),并在执行脚本script.py
之前保存文件。原因是此脚本从文件中读取其输入参数。
我尝试添加和玩
value_old = str(params[var_par][0])
value_new = str(I)
for key in fileinput.input("parameters.dat", inplace = 1):
print key.replace(value_old, value_new),
但是,我对此添加的问题是,例如,只要C
和B
共享相同的值,两者都会更改为新值。 (这当然是逻辑看到代码搜索值,而不是搜索给定的密钥var_par
。)否则它可以工作,但是对于代码当然不要有这个缺陷是至关重要的,我是至今还无法解决。另一方面,我觉得它一定不是那么困难,而且我很亲密。
非常感谢任何意见。
PS。我是一个蟒蛇初学者,所以我不是很擅长它,但会在需要时尝试提供任何帮助。
谢谢!
答案 0 :(得分:0)
感谢那些花时间考虑我的问题的人。但是,我设法自己解决了这个问题。我希望以下一些代码也可能对其他人的编程做出贡献。
execfile('parameters.dat')
var_par = 'B'
array = [1.4, 2.6, 4.8, 5.6]
for I in array: # Start choosing the values in array
if var_par in params: params[var_par][0] = I
f = open('params_temp.dat', 'w')
print >> f, 'params = {'
for p in params:
if type(params[p][0]) == str:
print >> f, ''.join(map(str,['"', p,'"',':'])), '\t',
print >> f, ''.join(map(str,['[', '"', params[p][0], '"', ','])), '\t', ''.join(map(str,['"', params[p][1], '"', ']', ',']))
else:
print >> f, ''.join(map(str,['"', p,'"',':'])), '\t',
print >> f, ''.join(map(str,['[', params[p][0], ','])), '\t', ''.join(map(str,['"', params[p][1], '"', ']', ',']))
print >> f, '}'
f.close()
os.remove('parameters.dat')
os.rename('params_temp.dat', 'parameters.dat')
execfile('script.py')
其中parameters.dat
仅包含(某些初始)字典:
params = {
"A": ["A part of", "#comment 1"],
"B": [1.2, "#comment 2"],
"C": ["the test run.", "#comment 3"]
}
然后,脚本将迭代生成文件parameters.dat
,然后调用script.py
将读取文件,之后将选择array
中的下一个值,生成参数文件,直到array
耗尽。
请注意,要正确构建新字典,我会在字符串和其他字符串之间进行一些排序。此外,我必须编写打印语句,以便不打印额外的空格。即,"B"
而不是" B "
,它不会被识别为字典键。
我知道这可能被认为是“基础知识”,但是当你开始学习一些东西时,没有什么是基本的...;)另外,如果有人知道如何以较简单的方式对其进行编程或在其他任何方面进行改进我很乐意听到。
干杯, 威廉。