我必须阅读以下二进制文件:
fname = '3B42RT.2014082603.7.bin'
with open(fname, 'rb') as fi:
dt = np.dtype([('>b1',2880),('>i2',(480,1440)),('>i2',(480,1440)),('>b1',(480,1440)),('>i2',(480,1440))])
data = np.fromfile(fi, dtype=dt)
但是,我收到了以下错误消息:
TypeError: data type not understood
我已经放了''基于以下正确读取数据的IDL程序:
file = "3B42RT.2014082603.7.bin"
data = {header: bytarr(2880.0), precip: intarr(1440.0,480.0), precip_error: intarr(1440.0,480.0), $
source_of_estimate: bytarr(1440.0,480.0), precip_uncal: intarr(1440.0,480.0)}
close, 1
openr, 1, file
readu, 1, data
close, 1
precip = swap_endian(data.precip)
print, precip
我想使用Python正确读取文件。 我认为我的代码中的问题是在NumPy中定义结构化数据类型。有兴趣知道是否有人熟悉这类问题。我浏览了以下NumPy文档,但由于我对Python的了解不多,我无法弄明白。 http://docs.scipy.org/doc/numpy/user/basics.rec.html#accessing-and-modifying-field-names
答案 0 :(得分:0)
NumPy dtypes中每个元组的第一个元素必须是字段名称。试试这个:
np.dtype([
('field1', '>b1',2880),
('field2', '>i2',(480,1440)),
('field3', '>i2',(480,1440)),
('field4', '>b1',(480,1440)),
('field5', '>i2',(480,1440)),
])