Как прочитать файл с номерами в формате Fortran в Python? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть отформатированный на Фортране текстовый файл с такими номерами, как этот 0.755473D-08.

, если я использую np.genfromtxt(data,dtype=None), он показывает b'0.755473D-08'.Как я могу избавиться от b?

1 Ответ

0 голосов
/ 26 апреля 2018
In [315]: txt = '''0.755473D-08
     ...: 0.755473D-08
     ...: 0.755473D-08'''
In [316]: np.genfromtxt(txt.splitlines())
Out[316]: array([nan, nan, nan])
In [317]: np.genfromtxt(txt.splitlines(),dtype=None)
...
Out[317]: array([b'0.755473D-08', b'0.755473D-08', b'0.755473D-08'], dtype='|S12')

Использование строки replace:

In [319]: txt.replace('D','e')
Out[319]: '0.755473e-08\n0.755473e-08\n0.755473e-08'
In [320]: np.genfromtxt(_.splitlines())
Out[320]: array([7.55473e-09, 7.55473e-09, 7.55473e-09])

Это также можно выполнять построчно (при чтении из файла).

С преобразователем, применяемым к каждомуэлемент (столбец на строку):

In [326]: np.genfromtxt(txt.splitlines(), converters={0:lambda x:float(x.replace('D','e'))}, encoding=None)
Out[326]: array([7.55473e-09, 7.55473e-09, 7.55473e-09])

Он не пытается выполнить дальнейшее преобразование dtype после преобразователя, поэтому мне пришлось включить float() в преобразователь.

...