使用D代替E的Python科学记数法

Esc*_*alo 11 python locale scientific-notation

Fortran程序生成的一些结果文件使用字母D而不是E例如报告双精度数字(科学记数法):

1.2345D+02
# instead of
1.2345E+02
Run Code Online (Sandbox Code Playgroud)

我需要使用Python处理大量的这些数据,我只是意识到它无法读取D符号中的数字,例如:

>>> A = 1.0D+01
  File "<stdin>", line 1
    A = 1.0D+01
           ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

我可以更改我的语言环境,让Python知道这D意味着E什么?我真的不想进行全球搜索和替换!

Pau*_*aul 15

如果您正在处理大量数据和/或正在对该数据进行大量计算,您可以考虑使用fortran友好的numpy模块,该模块支持双精度fortran格式.

>>> numpy.float('1.5698D+03')
1569.8
Run Code Online (Sandbox Code Playgroud)

  • 它也不适用于 numpy 版本 1.15.3(最新版本为 2018 年)。 (2认同)

Joh*_*lla 11

从Python程序中最简单的方法就是在解释每个条目之前添加一个步骤:

>>> val = "1.5698D+03"  # 1,569.8
>>> print float(val.replace('D', 'E'))
1569.8
Run Code Online (Sandbox Code Playgroud)


Bre*_*dan 8

另一种选择是Python 的fortranformat库.它将读取字符串并根据FORTRAN格式语句对其进行解释.即

>>> import fortranformat as ff
>>> line = ff.FortranRecordReader('(F10.0)')
>>> line.read('1.5698D+03')
[1569.8]
Run Code Online (Sandbox Code Playgroud)

安装时 easy_install -U fortranformat

有任何问题,请给我发电子邮件(我是作者).