views:

395

answers:

2

Some results file produced by Fortran programs report double precision numbers (in scientific notation) using the letter D instead of E, for instance:

1.2345D+02
# instead of
1.2345E+02

I need to process huge amounts of this data using Python, and I just realized it cannot read the numbers in the D notation, for instance:

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

Can I change my locale and let Python know that D means E? I really would not want to make a global search-and-replace!

+3  A: 

The simplest way, from your Python program, would be just to add a step before you interpret each entry:

>>> val = "1.5698D+03"  # 1,569.8
>>> print float(val.replace('D', 'E'))
1569.8
John Feminella
I will accept this as the answer, but I'm sad Python does not have a better way to do this. Thanks!
Arrieta
+5  A: 

If you are dealing with lots of data and/or are doing a lot computations with that data, you might consider using the fortran-friendly numpy module which supports double-precision fortran format out of the box.

>>> numpy.float('1.5698D+03')
1569.8
bpowah
I've been putting off numpy for a long time... maybe it's time I reconsider. Thank you! (+1)
Arrieta