2012-03-02 96 views
0

首先,我必須說我對Python編程不是很有經驗。我在R做了很多年的數據分析和編程。但是現在我轉向Python,特別是處理文本文件。替換文本文件中的字符串與循環中的另一個文本文件中的字符串

爲了什麼,我需要你的幫助:

我有一個第一文本文件喜歡以下

My name is Ben. 
I am 50 years old. 

在第二個文本文件我有不同的名稱和不同數量

Tom, 20 
Tim, 30 
Tina, 40 

我需要一個循環,在第一次迭代中將'Ben'替換爲'Tom',將第二次中的'Tim'和最後以及50中的'Tina'替換爲20,30和40.這三個新文件應該作爲文本文件導出。

在R我會調用一個搜索和替換函數在for循環與rownumber作爲計數器。

實際上,我的文本文件比這個小例子複雜得多。因此,我無法在R中進行搜索和替換,我想使用Python。

我能夠在Python中進行搜索和替換。但我需要一個提示,我可以如何運行這樣的搜索並在循環中進行替換。

任何幫助非常歡迎。

+0

因此,如何在程序應該處理從第一個文件的輸入?只需用新名稱和新時代的第一個號碼替換硬編碼的字符串「Ben」?說明不是很清楚,恕我直言。 – 2012-03-02 21:40:40

回答

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 2012-03-03 08:43:38

2

有,哦,有這麼多的方式來做到這一點。絕對最簡單的一個,我能想到的是:

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

我認爲重點是兩個數據集都來自一個文本文件。 – 2012-03-02 21:39:30