将文本文件中的字符串替换为循环中另一个文本文件的字符串

时间:2012-03-02 21:17:08

标签: python

首先,我要说我在Python编程方面不是很有经验。我用R做了很多年的数据分析和编程。但是现在我转向Python特别是处理文本文件。

我需要你的帮助:

我有第一个文本文件,如下面的

My name is Ben.
I am 50 years old.

在第二个文本文件中,我有一个具有不同名称和不同数字的表

Tom, 20
Tim, 30
Tina, 40

我需要一个循环,其中名称'Ben'在第一次迭代中被'Tom'替换,'Tim'在第二次迭代中,'Tina'在最后一次以及50岁时被替换为20,应将三个新文件导出为文本文件。

在R中,我将在一个for循环中调用一个搜索和替换函数,并将rownumber作为计数器。

实际上,我的文本文件就像小例子一样复杂得多。因此,我无法在R中进行搜索和替换,我想使用Python。

我也可以在Python中进行搜索和替换。但是我需要一个提示如何在循环中运行这样的搜索和替换。

非常欢迎任何帮助。

2 个答案:

答案 0 :(得分: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!'

答案 1 :(得分: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()