使用D而非E的Python科学计数法

17 投票
3 回答
10534 浏览
提问于 2025-04-15 17:21

一些由Fortran程序生成的结果文件会用科学记数法来表示双精度数字,但它们使用字母D来代替E,比如:

1.2345D+02
# instead of
1.2345E+02

我需要用Python处理大量这样的数据,但我刚发现Python无法读取D表示的数字,比如:

>>> A = 1.0D+01
  File "<stdin>", line 1
    A = 1.0D+01
           ^
SyntaxError: invalid syntax

我能不能改变我的地区设置,让Python知道D代表E呢?我真的不想进行全局的查找和替换!

3 个回答

8

另一个选择是 fortranformat 这个Python库。它可以读取字符串,并根据FORTRAN格式的说明来理解这些字符串。也就是说,

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

你可以通过 easy_install -U fortranformat 来安装它。

如果有任何问题,可以给我发邮件(我是这个库的作者)。

14

如果你正在处理大量数据,或者需要对这些数据进行很多计算,你可以考虑使用一个叫做 numpy 的模块。这个模块非常适合Fortran语言,并且它默认支持双精度的Fortran格式。

>>> numpy.float('1.5698D+03')
1569.8
15

最简单的方法是在你的Python程序中,在处理每个输入之前,先加一步:

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

撰写回答