【问题标题】:Parameter study using python使用python进行参数研究
【发布时间】:2014-03-24 17:11:59
【问题描述】:

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

<p1> bla bla 
<p2> bla bla

现在我想将 &lt;p1&gt;&lt;p2&gt; 替换为单独文件中的一些值(比如说 parameter_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 个新文件。谢谢你

【问题讨论】:

    标签: python csv parameters parameter-passing


    【解决方案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):

    【讨论】:

    • 嗨@Hugh Bothwell 谢谢你的剧本。它工作正常。但可能我的描述并不完整。我想在 p1 和 p2 之间建立所有可能的组合。能不能调整一下剧本。提前非常感谢您
    • 嗨@Hugh Bothwell ...可以添加一些解释
    • @Drago:你想解释什么?如果是特定的函数,Python有一个非常有用的特性叫做help(),即help(product)
    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2021-07-03
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    相关资源
    最近更新 更多