与IDL方法相比,使用Python中的unpack读取二进制文件

2024-05-19 07:56:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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写了同样的东西,但是我找不到相同的结果(甚至'a'的值也不同)。这是我的代码:

^{2}$

希望它能帮助任何人回答我。在

更新:正如答案中建议的那样,我现在正在尝试“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”的整数,而是数组([0,0],dtype=uint16)。在

我对'b'有如下错误:获得的大小(1107201884)不是给定数据类型(16)的倍数


Tags: 文件代码namereaddata过程二进制float
1条回答
网友
1楼 · 发布于 2024-05-19 07:56:15

根据a table of IDL data typesUINT(0)创建一个16位整数(即两个字节)。在Python ^{} module中,Iformat character表示4字节整数,H表示无符号16位整数。在

尝试将a解包的行改为

    a, = struct.unpack("H", fb.read(2))

不幸的是,这可能无法解决问题。将选项/f77_unformattedopenr一起使用,这意味着文件不仅仅包含变量的原始字节。(有关/f77_unformatted的更多信息,请参见documentation of the OPENR command。)

您可以尝试使用^{}来读取该文件,但是没有任何证据表明它可以工作。非格式化Fortran文件的二进制布局依赖于编译器。在

相关问题 更多 >

    热门问题