Python:在txt-fi中用浮点替换字符串

2024-04-26 10:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

这是个问题。在

我有一个.py文件和一个.txt文件。 为了简化,my.txt看起来像:

@x@

在我的。py里

^{pr2}$

我想把保存在txt中的x替换成

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)'))

问题是“replace”方法似乎只考虑字符串,我需要计算字符串的值。 你知道怎么做吗?在

谢谢


Tags: 文件inpytxtforinputstdoutsys
3条回答

把引号去掉str(x)

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

如果您想对输出有更多的控制,可以使用格式字符串。例如2位小数

^{pr2}$

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>)"

有了这个类定义,现在就可以这样做了

^{pr2}$

这允许您在几乎任何复杂度的模板中的任何位置使用任意数量的替换。这可以优雅地处理大量的案件。在

不确定是否只需要替换“x”还是文件中有其他变量,但如果是这样,我认为您也可以使用以下代码:

# preparing dict based on a.py
d1 = {}
for line in open('a.py','r'):
    if line.strip() and '=' in line:
        k,v = line.strip().split('=')
        d1['@' + k + '@'] = v

# preparing data from a.txt using dict from a.py
res = ''
for line in open('a.txt','r'):# lines below can be optimized depending on what you really need
    for k,v in d1.items():
        if k in line:
            line.replace(k, v)
    res += line '\n'

# write modified data
f = open('a.txt', 'w')
f.write(res.rstrip('\n'))
f.close()

相关问题 更多 >