我正试图准确地替换此mwe.inp
文件中的行:
MESH INFORMATION
MESH-TYPE EXPONENTIAL
IM R(1) DX JRMT RMT JRWS RWS
1 0.0000010000 0.0206069754 0 2.3607817007 721 2.7773902361
2 0.0000010000 0.0205809760 0 2.3169999310 721 2.7258822717
3 0.0000010000 0.0205301413 0 2.2337287219 721 2.6279161434
我使用的代码:
import math
with open("new", 'w') as fout:
with open("mwe.inp.", 'r') as finp:
for line in finp:
if line.startswith(" IM R(1) DX "):
for qline in range(3):
fout.write(line)
line = next(finp)
inpp = line.split()
r_ws = round(2.75234333248239 * 1.2, 10)
r_mt = round(r_ws * .85, 10)
dx = round(
math.log(float(r_ws) / float(inpp[1])) / (float(inpp[5]) - 1),
10)
inpp[2] = str(dx)
inpp[4] = str(r_mt)
inpp[6] = str(r_ws)
print(inpp)
str2rp = (" " + " ".join(inpp)) + "n"
line = line.replace(line, str2rp)
fout.write(line)
正在生成:
MESH INFORMATION
MESH-TYPE EXPONENTIAL
IM R(1) DX JRMT RMT JRWS RWS
1 0.0000010000 0.0208476178 0 2.8073901992 721 3.302811999
2 0.0000010000 0.0208476178 0 2.8073901992 721 3.302811999
3 0.0000010000 0.0208476178 0 2.8073901992 721 3.302811999
在mwe.inp
中给定,RMT和JRWS列之间的空间不同,因此它不是exactly
来替换文件。我需要准确地替换它,因为它是fortran程序的一个输入,读取输入的bu列号。
此外,如果round
四舍五入到小数点后第9位,则所有内容都将发生移位,如:
1 0.0000010000 0.0208476178 0 2.8073901992 721 3.302811999
2 0.0000010000 0.020847617 0 2.8073901992 721 3.302811999
3 0.0000010000 0.0208476178 0 2.8073901992 721 3.302811999
那么,我如何修改代码,使new
文件的格式与mwe.inp
完全相同呢?
On Needs more focus close vote我只是想创建与mwe.inp格式完全相同的新文件,这不是很直接吗?我可以请求谁投票支持need more focus
在一个问题中发现多个问题吗?
import math
with open("new", 'w') as fout:
with open("mwe.inp", 'r') as finp:
for line in finp:
if line.startswith(" IM R(1) DX "):
for qline in range(3):
fout.write(line)
line = next(finp)
inpp = line.split()
r_ws = round(2.75234333248239 * 1.2, 10)
r_mt = round(r_ws * .85, 10)
dx = round(
math.log(float(r_ws) / float(inpp[1])) / (float(inpp[5]) - 1),
10)
inpp[2] = "%.10f" % dx
inpp[4] = "%.10f" % r_mt
inpp[6] = "%.10f" % r_ws
print(inpp)
str2rp = f' {inpp[0]} {inpp[1]} {inpp[2]} {inpp[3]} {inpp[4]} {inpp[5]} {inpp[6]}n'
line = line.replace(line, str2rp)
fout.write(line)
您的问题是在RMT和JRWS的值之间添加了4个空格,而在原始文件中只有两个空格。
如果你像下面这样修改程序,一切都会好起来的。
inpp[4] = f'{inpp[4]} {inpp[5]}'
inpp.pop(5)
inpp[5] = str(r_ws)