使用D而非E的Python科学计数法
一些由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