2012-03-02 98 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