Python:在txt文件中用浮点替换字符串
这里有个问题 我有一个.py文件和一个.txt文件。 为简化起见,my.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
@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:猜测它们的意思可能是一项糟糕的政策。当它令人困惑时,我宁愿要求澄清。我觉得这很有帮助,因为我学到了更多。