Lectura del formato de doble precisión fortran en python.

Estoy tratando de leer un número de doble precisión de Fortran como 1.2345D + 02 en python, pero obtuve el siguiente error:

>>> float('1.2345D+02') Traceback (most recent call last): File "", line 1, in  ValueError: invalid literal for float(): 1.2345D+02 

Siguiendo los consejos sobre la notación científica de Python usando D en lugar de E , probé numpy pero también obtengo el mismo error:

 import numpy >>> numpy.float("1.2345D+02") Traceback (most recent call last): File "", line 1, in  ValueError: invalid literal for float(): 1.2345D+02 

¿Existe una solución en Python para leer esos números de doble precisión sin tan solo cambiar la ‘D’ a ‘E’?

EDITAR: He reemplazado una syntax incorrecta en las cadenas. Pero aún me salen errores.

¿Qué hay de malo con float(str.replace("D", "E")) ?

Tenga en cuenta que numpy SÍ admite la notación numpy.float("1.2345D+02") : numpy.float("1.2345D+02") .

Parece que tienes un propósito más profundo , tal vez arrojar algo de luz ayudaría.

La sustitución se puede hacer un poco más cuidadosa usando una expresión regular:

 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'\1E\2', text) # DEW=[0.242E+03 -4.320E-06] 

O si tiene una lista de cadenas (líneas) leídas de un archivo usando 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'\1E\2', line) if line != res: lines[ln] = res # ['REPORT CARD\n', 'GRADE: D+ (1.3E+00/4.0E+00)\n']