首先,我要说我在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中进行搜索和替换。但是我需要一个提示如何在循环中运行这样的搜索和替换。
非常欢迎任何帮助。
答案 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()