用完全相同的格式替换python中的一行



我正试图准确地替换此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)

相关内容

  • 没有找到相关文章