У меня есть процедура IDL для чтения двоичного файла, и я пытаюсь перевести его в процедуру Python.Код IDL выглядит так:
a = uint(0)
b = float(0)
c = float(0)
d = float(0)
e = float(0)
x=dblarr(nptx)
y=dblarr(npty)
z=dblarr(nptz)
openr,11,name_file_data,/f77_unformatted
readu,11,a
readu,11,b,c,d,e
readu,11,x
readu,11,y
readu,11,z
, он отлично работает.Поэтому я пишу то же самое в Python, но я не могу найти те же результаты (даже значение «а» отличается).Вот мой код:
x=np.zeros(nptx,float)
y=np.zeros(npty,float)
z=np.zeros(nptz,float)
with open(name_file_data, "rb") as fb:
a, = struct.unpack("I", fb.read(4))
b,c,d,e = struct.unpack("ffff", fb.read(16))
x[:] = struct.unpack(str(nptx)+"d", fb.read(nptx*8))[:]
y[:] = struct.unpack(str(npty)+"d", fb.read(npty*8))[:]
z[:] = struct.unpack(str(nptz)+"d", fb.read(nptz*8))[:]
Надеюсь, что это поможет кому-нибудь ответить мне.
Обновление: Как предлагается в ответах, я сейчас пробую модуль "FortranFile", но яЯ не уверен, что все понял о его использовании.
from scipy.io import FortranFile
f=FortranFile(name_file_data, 'r')
a=f.read_record('H')
b=f.read_record('f','f','f','f')
Однако вместо целого числа для 'a' я получил: array ([0, 0], dtype = uint16).
И у меня произошла следующая ошибка для 'b': полученный размер (1107201884) не кратен указанному dtypes (16)