使用python进行参数研究

时间:2014-03-24 17:11:59

标签: python csv parameters parameter-passing

我有一个名为pattern.pc的文件,内容如下:

<p1> bla bla 
<p2> bla bla

现在我想将<p1><p2>替换为单独文件中的一些值(比如参数_values.pc),例如p1的值位于第一行,而第二行中的p2:

1.0, 2.0, 3.0, 4.0
10.0, 11.0, 12.0, 13.0

并获取此类新文件(此处为p1 = 1.0p2 = 10.0):

1.0 bla bla
10.0 bla bla

将命名为例如pattern_p1_1_p2_10.pc,依此类推。你能帮忙在python中做到吗?我忘了提到参数值之间的所有可能组合都是可以接受的 - 在这种特殊情况下,我们最后会有16个新文件。谢谢

1 个答案:

答案 0 :(得分:1)

# assumes Python 2.7

PARAMETERS_FILE = "parameter_values.pc"
PATTERN_FILE    = "pattern.pc"
OUTPUT_NAME     = "pattern_p1_{p1}_p2_{p2}.pc"

def strs(line, split_on=None):
    return [s.strip() for s in line.split(split_on)]

def main():
    with open(PATTERN_FILE) as inf:
        template = inf.read()

    with open(PARAMETERS_FILE) as inf:
        p1_lst = strs(next(inf, ""), ",")
        p2_lst = strs(next(inf, ""), ",")

    for p1, p2 in zip(p1_lst, p2_lst):
        fname = OUTPUT_NAME.format(p1=p1, p2=p2)
        data = template.replace("<p1>", p1).replace("<p2>", p2)
        with open(fname, "w") as outf:
            outf.write(data)

if __name__=="__main__":
    main()

编辑:好的,如果您想要所有组合,

from itertools import product

并将for p1, p2 in zip(p1_lst, p2_lst):替换为for p1, p2 in product(p1_lst, p2_lst):