Чтение формата двойной точности fortran в python
Я пытаюсь прочитать номер двойной точности Fortran, такой как 1.2345 D+02 в python, но я получил следующую ошибку:
>>> float('1.2345D+02')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 1.2345D+02
следуя совету на научная нотация Python с использованием D вместо E, я попробовал numpy, но я также получаю ту же ошибку:
import numpy
>>> numpy.float("1.2345D+02")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 1.2345D+02
есть ли решение в Python для чтения этих чисел двойной точности, не просто меняя " D " на "E"?
EDIT: Я заменил плохой синтаксис на строках. Но все же Я получаю ошибки.
2 ответов
что с float(str.replace("D", "E"))
?
обратите внимание, numpy поддерживает нотацию fortran:numpy.float("1.2345D+02")
.
у вас, кажется, есть некоторые более глубокие цели, возможно, пролить свет на это поможет.
подстановку можно сделать немного более осторожной, используя регулярное выражение:
import re
re_dbl_fort = re.compile(r'(\d*\.\d+)[dD]([-+]?\d+)')
text = 'DEW=[0.242D+03 -4.320D-06]'
re_dbl_fort.sub(r'E', text)
# DEW=[0.242E+03 -4.320E-06]
или если у вас есть список строк (строк), считанных из файла с помощью readlines()
:
lines = ['REPORT CARD\n', 'GRADE: D+ (1.3D+00/4.0D+00)\n']
for ln, line in enumerate(lines):
res = re_dbl_fort.sub(r'E', line)
if line != res:
lines[ln] = res
# ['REPORT CARD\n', 'GRADE: D+ (1.3E+00/4.0E+00)\n']