在Python中读取Fortran的默认输出

时间:2016-11-22 12:21:20

标签: python numpy fortran

我有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选项,但没有任何线索。

1 个答案:

答案 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-替换减号。