Научная нотация Python с использованием D вместо E - PullRequest
10 голосов
/ 24 декабря 2009

В некоторых файлах результатов, создаваемых программами Fortran, сообщается о числах двойной точности (в научной нотации) с использованием буквы D вместо E, например:

1.2345D+02
# instead of
1.2345E+02

Мне нужно обработать огромные объемы этих данных с помощью Python, и я только что понял, что он не может прочитать числа в нотации D, например:

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

Могу ли я изменить свою локаль и сообщить Python, что D означает E? Я действительно не хотел бы делать глобальный поиск и замену!

Ответы [ 3 ]

14 голосов
/ 24 декабря 2009

Если вы имеете дело с большим количеством данных и / или выполняете много вычислений с этими данными, вы можете рассмотреть возможность использования модуля numpy с поддержкой Fortran, который поддерживает стандартный формат Фортрана двойной точности .

>>> numpy.float('1.5698D+03')
1569.8
10 голосов
/ 24 декабря 2009

Самый простой способ из вашей программы на Python - просто добавить шаг перед интерпретацией каждой записи:

>>> val = "1.5698D+03"  # 1,569.8
>>> print float(val.replace('D', 'E'))
1569.8
7 голосов
/ 12 июля 2011

Другой вариант - библиотека fortranformat для Python. Он будет читать строки и интерпретировать их в соответствии с оператором формата FORTRAN. т.е.

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

Установить с easy_install -U fortranformat

Любые вопросы, напишите мне (я автор).

...