У меня есть файл txt в формате fortran с такими номерами, как этот 0.755473D-08.
если я использую np.genfromtxt(data,dtype=None), он показывает b'0.755473D-08'. Как я могу избавиться от b?
См. stackoverflow.com/questions/5989351/… Combine with converters в genfromtxt.
А этот stackoverflow.com/questions/1959210/…
Да, но моя проблема в том, что я не могу загрузить числа в формате fortran в python, потому что он показывает nan, а не заменяет D.
это вроде конкретно про использование genfromtxt? Я бы сказал, что вам нужно установить тип как строку и преобразовать после прочтения.
b'...' обозначает байтовую строку в py3. Если вы измените "D" на "e", обычный парсинг с плавающей запятой должен работать.
@hpaulj Я новичок в проверке байтов, что мне делать? Я попробовал data.replace("D","e"), но он не работает.






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() в преобразователь.
Вы искали, прежде чем спросить?