我有这个代码在值之间插值并返回特定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)
答案 0 :(得分:2)
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()
的返回值,并将此值转换为字符串。