如何在python中替换特定单词下的值?

时间:2017-11-11 18:47:19

标签: python python-3.x replace find python-requests

我有这个代码在值之间插值并返​​回特定X和Y的Z值。我正在尝试打开另一个文件(world.txt)并将值粘贴到特定名称Nz下。< / p>

文件的组织方式是

Nx
5
Ny
0.1
Nz
0.8

但我得到的是givemeZ(0.5,0.04)而不是值0.78

请您提出一些如何解决问题的建议?

import numpy as np
from scipy import interpolate
from scipy.interpolate import griddata
import itertools
from scipy.optimize import curve_fit

xx= 0.15, 0.3, 0.45, 0.5, 0.55
yy= 0.01, 0.02, 0.03, 0.04, 0.05
zz= 0.75, 0.76, 0.77, 0.78, 0.79

tck = interpolate.bisplrep(xx, yy, zz, s=0)    
def givemeZ(X,Y):
    return interpolate.bisplev(X,Y,tck)
## to replace the value 
with open('world.txt', 'r') as file :
  filedata = file.read()
# Replace the target string
filedata = filedata.replace('Nz', 'givemeZ(0.5,0.01)')
# Write the file out again
with open('world.txt', 'w') as file:
  file.write(filedata)

2 个答案:

答案 0 :(得分:2)

嗯,是的。您通过{{1>} 字符串文字 filedata.replace。您应该将实际值传递给它,转换为字符串,如

'givemeZ(0.5,0.01)'

根据详细信息,您可以在没有filedata = filedata.replace('Nz', str(givemeZ(0.5,0.01))) 调用的情况下离开 - 我不确定str()是否可以顺利处理可以转换的非replace参数到str。明确地自己进行转换应该可以。

要替换下一行,你需要一些在循环中运行的逻辑 - 我认为你不能完全由str完成。你可以这样做:

replace

然后您可以将新文本写回new_lines = [] previous_line = '' with open('world.txt', mode = 'r') as f: for current_line in f: if previous_line == 'Nz': new_lines.append(str(givemeZ(0.5,0.01))) else: new_lines.append(current_line) previous_line = current_line new_text = '\n'.join(new_lines) - 请注意,您在此处执行的操作(即使在原始代码中)也不会修改实际文件,只修改内存中的Python字符串。

答案 1 :(得分:1)

您的代码按预期工作,

filedata = filedata.replace('Nz', 'givemeZ(0.5,0.01)')

将字符串Nz替换为字符串givemeZ(0.5,0.01)

您想要使用Nz的返回值重播givemeZ(0.5,0.01)。使用以下内容:

filedata = filedata.replace('Nz', str(givemeZ(0.5, 0.01)))

这将获取givemeZ()的返回值,并将此值转换为字符串。