2016-08-06 6 views
-2

私は問題に取り組んでおり、私の目標はファイル内の変数とファイルの名前を置き換えることです。 問題は、すべての組み合わせ(一般的には24個の組み合わせ)について、同時に2つの変数を変更する必要があることです。ファイル内の変数のペアを置換する

私は文字列のすべての組み合わせを作成する方法を知っていますが、リストを内部に入れて反復処理したいのです。

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 

私はリストを使用する必要がありますが:

元のファイル:name_file_R_T1_T2_gamma.txt

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

と変数の各ペアについては、以下のようなファイルやファイルの名前の値を変更

は、次のように置き換えられます。

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 

""" 

など

+0

あなたの投稿は不明です。おそらく、あなたがあなたのテンプレートについてのより多くの情報を提供するならば。 – Kosch

+0

だから 'input_name =" name_file_R_T1_T2_gamma.txt "'?あなたはファイルの名前が変わらないと期待したいので、 "" one "、" two "、" phi "、" distance "というテキストを置き換えます。 .txt "' -3はどこから来たのですか?あなたの質問を明確にするために編集してください。 –

+0

私のテンプレートに関する詳細を追加しました。 – Monica

答えて

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) 

私は直面していますがD 2つの問題:

1)私のコードはreplace_variables機能に(離れてデフォルトのものから)変数の値を変更しないと、私は取得しています: name_file_Rdistance_T1T1_T20_gamma0.txtを、そしてので に、私は理由デフォルト引数を渡すと思います関数に渡します。

2)私の機能は、分離したファイルを作成しません。

関連する問題