将fortran双精度格式读入python

将fortran双精度格式读入python,python,input,double,fortran,Python,Input,Double,Fortran,我试图将Fortran双精度数字(如1.2345D+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 浮动('1.2345D+02') 回溯(最近一次呼叫最后一次):

我试图将Fortran双精度数字(如1.2345D+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
浮动('1.2345D+02') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:浮点()的文字无效:1.2345D+02 按照上的建议,我尝试了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
导入numpy
>>>浮点数(“1.2345D+02”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:浮点()的文字无效:1.2345D+02
Python中有没有一种解决方案,可以在不将“D”改为“E”的情况下读取这些双精度数字


编辑:我替换了字符串上的错误语法。但是我还是会出错。

浮点(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'\1E\2', text)
# DEW=[0.242E+03 -4.320E-06]
或者,如果您有使用
readlines()
从文件中读取的字符串(行)列表:


一般来说,用“E”代替“D”没有什么错。我只是想知道是否有“本地”解决方案。如果numpy支持fortran表示法,为什么它会失败,如示例所示?是的,我需要解析一些巨大的fortran生成的数据文件,并提取一些特定的数据。谢谢因为
numpy.float(1.2345D+02)
将被python解释器解析为调用
numpy.float
1.2345D+02
1.2345D+02,因此它会给出一个错误<代码>“1.2345D+02”是一个字符串,非常好。谢谢。实际上,这是我的例子中的一个拼写错误。我已经纠正了它,但错误(另一个)仍然存在。可能您正在使用不同版本的numpyAt,至少
numpy 1.5.1
不支持
numpy.float(“1.2345D+02”)
。请注意,
fortranformat
Python库(在PyPI上)可能会有所帮助-我应该透露我是作者。
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']