我有 Fortran 77 中旧代码的输出。输出是用
编写的write(NUM,*)
线。基本上,默认格式。以下是部分输出:
1.25107598E-67 1.89781536E-61 1.28064971E-94 5.85754394-118 8.02718071E-94
我有一个用 F77 和 READ(NUM,*)
编写的后处理工具正确读取输入文件为:
1.25107598000000E-67 1.89781536000000E-61 1.28064971000000E-94 5.85754394000000E-118 8.02718071000000E-94
有问题的号码是 5.85754394-118
。
它将正确读取,因为它的意思是 5.85754394E-118
在F77中。
但是,现在我用 python 编写了一个后处理,并且有以下代码行:
Z = numpy.fromstring(lines[nl], dtype=float, sep=' ')
它将逐行读取输出(通过 nl
上的循环)。
但是当它达到5.85754394-118
时number 它将停止读取,进入下一行输出,基本上读取错误的数字。有没有办法以正确的方式读取它(Fortran的默认方式)?
我想我需要改变dtype
选项但没有任何线索。
最佳答案
您可以使用正则表达式有效地后处理输出:
import re
r = re.compile(r"(?<=\d)\-(?=\d)")
output_line = "1.25107598E-67 1.89781536E-61 1.28064971E-94 5.85754394-118 8.02718071E-94 "
print(r.sub("E-",output_line))
结果:
1.25107598E-67 1.89781536E-61 1.28064971E-94 5.85754394E-118 8.02718071E-94
(?<=\d)\-(?=\d)
对数字执行后向查找和先行查找,并搜索它们之间的单个减号。它将减号替换为 E-
.
关于python - 在 Python 中读取 Fortran 的默认输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40741744/