我有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
。
它将正确读取,因为它在F77中意味着5.85754394E-118
。
但是,现在我在python中编写了一个后期处理,我有一行代码:
Z = numpy.fromstring(lines[nl], dtype=float, sep=' ')
将逐行读取输出(通过nl
上的循环)。
但当它达到5.85754394-118
数字时,它将停止读取,转到下一行输出并基本上读错了数字。有没有办法以正确的方式阅读它(Fortran的默认方式)?
我猜我需要更改dtype
选项,但没有任何线索。
答案 0 :(得分:4)
您可以使用正则表达式有效地对输出进行后处理:
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)
为数字执行lookbehind和lookahead,并在它们之间搜索单个减号。它用E-
替换减号。