替换文件中的变量对

时间:2016-08-06 13:52:02

标签: python

我正在处理一个问题,我的目标是替换文件中的变量和文件名。 问题是我必须同时为所有组合更改几个变量(通常是24种组合)。

我知道如何创建所有字符串组合,但我想将列表放在内部并迭代它们。

a = [ 'distance', 'T1', 'T2', 'gamma' ]
new_list = list(itertools.permutations(a, 2))

我创建了传递我的值的函数:

def replace_variables(distance ='0', T1 ='0', T2 = '0', gamma = '0'):
        template_new = template.replace('*distance*', distance).replace('*T1*', T1).replace('*T2*', T2).replace('*gamma*', gamma)
        input_file = input_name.replace('one','T1'+T1).replace('two','T2'+T2).replace('phi','PHI'+Phi).replace('distance','R'+distance)

        return template_new, input_file

当我调用该函数时,我只能传递变量的名称。

for i in new_list:
        elem1 = i[0]
        elem2 = i[1]
        template_new, input_file =replace_variables(elem1, elem2)
        print input_file

虽然我需要使用列表:

distance = ['-3','+3']
T1 = ['-3', '+3']
T2 = ['-3', '+3']
gamma = ['-3', '+3']

对于每对变量,更改文件中的值和文件名,例如:

原始档案:name_file_R_T1_T2_gamma.txt

将替换为:

name_file_3_3_0_0.txt, name_file_3_-3_0_0.txt,  name_file_-3_3_0_0.txt,
name_file_3_3_0_0.txt, name_file_3_0_3_0.txt, name_file_3_0_-3_0.txt,

等等。

原始模板如下:

template = """
 R              =         3.0 *distance* cm
 THETA1         =         60. *T1*  degree
 THETA2         =         2.0  *T2* degree
 GAMMA          =         0 *gamma* degree
"""

我希望获得:

template = """     
     R              =         3.0 +3 cm
     THETA1         =         60. +3  degree
     THETA2         =         2.0  +0 degree
     GAMMA          =         0 +0 degree

"""

等等

1 个答案:

答案 0 :(得分:0)

我想我几乎解决了上述问题:

#!/usr/bin/env python
import itertools
import copy

def replace_variables(i, distance ='0', T1 ='0', T2 = '0', gamma = '0' ):
        k_  = copy.deepcopy(i)
        k_[0][0] = '-2'
        k_[1][0] = '2'
        template_new = template.replace('*distance*', distance).replace('*T1*', T1).replace('*T2*', T2).replace('*gamma*', gamma)
        input_file = input_name.replace('one','T1'+T1).replace('two','T2'+T2).replace('gamma','gamma'+gamma).replace('distance','R'+distance)

     f = open(template_new, 'w')
     f.write(template_new)
     f.close()


input_name = 'name_file_distance_T1_T2_gamma.txt'

template = """
  R              =         3.0 *distance* cm
 THETA1         =         60. *T1*  degree
 THETA2         =         2.0  *T2* degree
 GAMMA          =         0 *gamma* degree
"""

a = [['distance','+2','-2'], ['T1','+2','-2'], ['T2','+2','-2'], ['gamma','+2','-2']]
new_list = list(itertools.permutations(a, 2))

for i in new_list:
      replace_variables(i, x, y)

虽然我遇到了两个问题:

1)我的代码不会更改replace_variables函数中的变量值(除了默认值),而且我得到: name_file_Rdistance_T1T1_T20_gamma0.txt,依此类推 我认为是因为传递给函数的默认参数。

2)我的功能不会创建单独的文件。