Python:在txt文件中用浮点替换字符串

Python:在txt文件中用浮点替换字符串,python,string,replace,text-files,Python,String,Replace,Text Files,这里有个问题 我有一个.py文件和一个.txt文件。 为简化起见,my.txt如下所示: @x@ 我有 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 enumer

这里有个问题

我有一个.py文件和一个.txt文件。 为简化起见,my.txt如下所示:

@x@
我有

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)'))
问题是,替换方法似乎只考虑字符串,而我需要评估字符串的值。 知道怎么做吗

谢谢

请不要引用strx

如果希望对输出进行更多控制,可以使用格式字符串。例如小数点后2位

for i, line in enumerate(fileinput.input('mytxtfile.txt', inplace = 1)): 
    sys.stdout.write(line.replace('@x@', "%.2f"%x))
只需将报价从strx中删除即可

如果希望对输出进行更多控制,可以使用格式字符串。例如小数点后2位

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

不确定是否只需要替换“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()

不确定是否只需要替换“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()
Template类是一种很好的方法

这使您可以在模板中的任意位置使用任意数量的替换,几乎任何复杂程度都可以。这可以很好地处理大量的案例。

string.Template类是一种很好的方法


这使您可以在模板中的任意位置使用任意数量的替换,几乎任何复杂程度都可以。这可以很好地处理大量的案例。

虽然您已经收到了问题的很好的答案,但还有另一种方法。在文本文件中使用python格式字符串,例如%xf或%xs。此示例显示了它的工作原理:

line = '%(x)f or %(x).2f or %(x)s'
x = 15
print line % locals()

您可以使用字典,例如打印行%{'x':15},而不是局部变量。我使用它作为在python中实现模板的一种快速而肮脏的方法。

尽管您已经收到了关于您的问题的很好的答案,但还有另一种方法。在文本文件中使用python格式字符串,例如%xf或%xs。此示例显示了它的工作原理:

line = '%(x)f or %(x).2f or %(x)s'
x = 15
print line % locals()

您可以使用字典,例如打印行%{'x':15},而不是局部变量。我使用它作为在python中实现模板的一种快速而肮脏的方式。

谢谢,我已经测试过它,但没有使用好的txt文件,因为它是从我以前尝试使用引号更改的,所以它不起作用:@remi:没有使用好的txt文件,因为它是从我以前尝试使用引号更改的?什么?@S.Lott他已经运行了不正确的代码,将“@x@”替换为“strx”,所以当他试图运行正确的版本,即没有strx的引号时,它就不起作用了,因为没有@x@s在输入文本文件中。不管怎么说,这就是我的理解。@Cam Jackson:猜测它们的意思可能是一项糟糕的政策。当它令人困惑时,我宁愿要求澄清。我发现它很有帮助,因为我学到了更多。谢谢,我已经测试过它,但没有使用好的txt文件,因为它是从我上次尝试使用引号更改的,所以它不起作用:@remi:没有使用好的txt文件,因为它是从我上次尝试使用引号更改的?什么?@S.Lott他已经运行了不正确的代码,将“@x@”替换为“strx”,所以当他试图运行正确的版本,即没有strx的引号时,它就不起作用了,因为没有@x@s在输入文本文件中。不管怎么说,这就是我的理解。@Cam Jackson:猜测它们的意思可能是一项糟糕的政策。当它令人困惑时,我宁愿要求澄清。我觉得这很有帮助,因为我学到了更多。