这里有个问题。
我有一个 .py 文件和一个 .txt。 为了简化,我的 .txt 看起来像:
@x@
在 .py 我有
x=15
我想用py中保存的值替换txt中的@x@,即我的txt应该是这样的
15
我试过这个:
for i, line in enumerate(fileinput.input('mytxtfile.txt', inplace = 1)):
sys.stdout.write(line.replace('@x@', 'x'))
或与
for i, line in enumerate(fileinput.input('mytxtfile.txt', inplace = 1)):
sys.stdout.write(line.replace('@x@', 'str(x)'))
问题是“替换”方法似乎只考虑字符串,我需要评估字符串的值。 知道怎么做吗?
谢谢
请您参考如下方法:
string.Template 类是执行此操作的好方法。
http://docs.python.org/library/string.html#template-strings
from string import Template
class MyTemplate( Template ):
delimiter= '@'
pattern= r"@(?P<escaped>@)|@(?P<named>[_a-z][_a-z0-9]*)@|@(?P<braced>[_a-z][_a-z0-9]*)@|@(?P<invalid>)"
给定这个类定义,你现在可以这样做
with open( 'a.txt', 'r' ) as source:
t = MyTemplate(source.read())
result= t.substitute( x=15 )
print result
这允许您在几乎任何复杂性的模板中的任何位置使用任意数量的替换。这可以优雅地处理非常非常多的情况。
