Python:用txt文件中的float替换字符串

1 python string replace text-files

这是一个问题.

我有.py文件和.txt.为了简化,我的.txt看起来像:

@x@
Run Code Online (Sandbox Code Playgroud)

在.py我有

x=15
Run Code Online (Sandbox Code Playgroud)

我想用py中保存的值替换txt中的@ x @,即我的txt应该是这样的

15
Run Code Online (Sandbox Code Playgroud)

我试过这个:

for i, line in enumerate(fileinput.input('mytxtfile.txt', inplace = 1)):
    sys.stdout.write(line.replace('@x@', 'x'))
Run Code Online (Sandbox Code Playgroud)

或者

for i, line in enumerate(fileinput.input('mytxtfile.txt', inplace = 1)):
    sys.stdout.write(line.replace('@x@', 'str(x)'))
Run Code Online (Sandbox Code Playgroud)

问题是"替换"方法似乎只考虑字符串,我需要评估字符串的值.知道怎么做吗?

谢谢

S.L*_*ott 9

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>)"
Run Code Online (Sandbox Code Playgroud)

鉴于此类定义,您现在可以执行此操作

with open( 'a.txt', 'r' ) as source:
    t = MyTemplate(source.read())
    result= t.substitute( x=15 )
    print result
Run Code Online (Sandbox Code Playgroud)

这允许您在模板中的任何位置使用任意数量的替换,几乎任何复杂性.这可以优雅地处理非常大量的案例.


Joh*_*ooy 7

把报价关掉 str(x)

for i, line in enumerate(fileinput.input('mytxtfile.txt', inplace = 1)): 
    sys.stdout.write(line.replace('@x@', str(x)))
Run Code Online (Sandbox Code Playgroud)

如果您想要更多地控制输出,可以使用格式字符串.例如2位小数

for i, line in enumerate(fileinput.input('mytxtfile.txt', inplace = 1)): 
    sys.stdout.write(line.replace('@x@', "%.2f"%x))
Run Code Online (Sandbox Code Playgroud)