2012-03-02 16 views
0

まず最初に、私はPythonプログラミングにあまり経験がありません。私は何年にもわたってRで多くのデータ分析とプログラミングを行ってきました。しかし、今私は特にテキストファイルの扱いのためにPythonに移ります。私はあなたの助けが必要なものについてはテキストファイル内の文字列をループ内の別のテキストファイルの文字列に置き換えます。

私は2番目のテキストファイルで

My name is Ben. 
I am 50 years old. 

を次のように最初のテキストファイルを持っている私は、異なる名前と異なる数

Tom, 20 
Tim, 30 
Tina, 40 
を持つテーブルを持っています

最初の反復で 'Ben'という名前が 'Tom'に置き換えられ、2番目の 'Tim'と最後の 'Tina'と50歳が20,30に置き換えられるループが必要です3つの新しいファイルは、テキストファイルとしてエクスポートする必要があります。

Rでは、forループの検索と置換関数をrownumberをcounterとして呼び出します。

実際、私のテキストファイルは小さな例のようにはるかに複雑です。したがって、私はseachをやり直すことができず、R内で置き換えてPythonを使いたいと思っています。

私はPythonで検索と置換を行うことができます。しかし、私はどのようにこのような検索を実行し、ループで置換することができるかのヒントが必要です。

非常に歓迎されます。

+0

それでは、どのプログラムが最初のファイルからの入力を処理することになっていますか?ハードコードされた文字列 "Ben"を新しい名前と新しい年齢で見つかった最初の数字に置き換えてください。説明はあまり明確ではない、IMHO。 –

答えて

0
txt = open(source).read() 
for lig in open(values): 
    name, age = lig.split(',') 
    rpl = txt.replace('Ben', name.strip()) 
    rpl = rpl.replace('50', age.strip()) 
    out = open(name), 'w') 
    out.write(rpl) 
    out.close() 
+0

**ありがとうございました** dugres。まさに私が探していたもの。 – Tim

2

ああ、そうする方法はたくさんあります。私は考えることができる絶対最も簡単な1は以下の通りです:

TEMPLATE = "My name is {name}\nI am {age} years old." 

for name, age in [("Tom", 20), ("Tim", 30), ("Tina", 40)]: 
print TEMPLATE.format(name=name, age=age) 

出力:

My name is Tom 
I am 20 years old. 
My name is Tim 
I am 30 years old. 
My name is Tinakughjkjgjkhg 
I am 40 years old. 

このソリューションは、あなたがより精巧なテンプレートを取得するとすぐに複雑で醜いになるにバインドされています。最初の「移動」はPythonのtemplate strings(ドキュメントからの例)になります

>>> from string import Template 
>>> s = Template('$who likes $what') 
>>> s.substitute(who='tim', what='kung pao') 
'tim likes kung pao' 
>>> d = dict(who='tim') 
>>> Template('Give $who $100').substitute(d) 
Traceback (most recent call last): 
[...] 
ValueError: Invalid placeholder in string: line 1, col 10 
>>> Template('$who likes $what').substitute(d) 
Traceback (most recent call last): 
[...] 
KeyError: 'what' 
>>> Template('$who likes $what').safe_substitute(d) 
'tim likes $what' 

しかし、本当の解決策は、私に関する限り、テンプレートエンジンを使用することです:Jinja2は、トリックを行います。

>>> from jinja2 import Template 
>>> template = Template('Hello {{ name }}!') 
>>> template.render(name='John Doe') 
u'Hello John Doe!' 
+0

私は、両方のデータセットがテキストファイルから来ているというのがポイントだと思います。 –

関連する問題