我有一个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)的倍数
根据a table of IDL data types,} module 中,
UINT(0)
创建一个16位整数(即两个字节)。在Python ^{I
format character表示4字节整数,H
表示无符号16位整数。在尝试将
a
解包的行改为不幸的是,这可能无法解决问题。将选项
/f77_unformatted
与openr
一起使用,这意味着文件不仅仅包含变量的原始字节。(有关/f77_unformatted
的更多信息,请参见documentation of the OPENR command。)您可以尝试使用^{} 来读取该文件,但是没有任何证据表明它可以工作。非格式化Fortran文件的二进制布局依赖于编译器。在
相关问题 更多 >
编程相关推荐