-1

我在 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中,然后做同样的事情,但是物理上B改变给定键的值(在这种情况下是 for )在脚本执行之前由文件定义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相同的值时,两者都会被更改为新值。(这当然是看到代码搜索值而不是给定 key 的逻辑var_par。)否则它可以工作,但是对于代码来说当然没有这个缺陷是至关重要的,我目前还无法做到解决。另一方面,我有一种感觉,它一定不会那么困难,而且我很接近。

非常感谢您的任何意见。

附言。我是 python 初学者,所以我不是很擅长,但如果/需要时会尝试提供任何帮助。

谢谢!

4

1 回答 1

-1

感谢那些花时间考虑我的问题的人。但是,我自己已经设法解决了这个问题。我希望下面的代码也有助于其他人的编程。

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 "是不会被识别为字典键。

我知道这可能被认为是“基础”,但是当你开始学习一些东西时,没有什么是真正的基础......;)另外,如果有人知道如何以不那么冗长的方式编程或以任何其他方式改进它,我很高兴听到。

干杯,威廉。

于 2013-04-08T18:07:05.377 回答