如何在Python中读取Big或Lower Endian格式的文件

时间:2016-08-02 13:42:33

标签: python matlab io binary endianness

我正在尝试将脚本从Matlab更新为Python,并且在单个部分遇到问题。该代码应该读取二进制文件并将其转换为我可用于绘制图形的内容。

我遇到麻烦的MatLab代码是:

%reopen the data file using the correct HIFIRST/LOFIRST format

if COMM_ORDER==0
   fid=fopen(fn,'r','ieee-be');   %HIFIRST
else
   fid=fopen(fn,'r','ieee-le');    %LOFIRST
end;

这不是我原来的代码,因此我无法知道在Python中做什么,而且我还没有找到使用Google的答案(震惊,对吧?)。

可能是我理解它错了,但我认为它只是想重新格式化文件字节序,而不是实际读取文件本身。我后来使用fid.seek()和a.fromfile()(其中a = array.array('h'或'b'或'l'或'd'))从文件中绘制而不是数据数组。

MatLab fread:

function b=ReadByte(fid, Addr)
fseek(fid,Addr,'bof');
b=fread(fid,1,'int8');

function w=ReadWord(fid, Addr)
fseek(fid,Addr,'bof');
w=fread(fid,1,'int16');

等等:

function d=ReadDouble(fid, Addr)
fseek(fid,Addr,'bof');
d=fread(fid,1,'float64');

这些函数已经使用:

转换为python
def ReadByte(fid, Addr):
fid.seek(Addr,0)
    a=array.array('b')
    a.fromfile(fid,1)
b=a[0]
    return b

def ReadWord(fid, Addr):
fid.seek(Addr,0)
    a=array.array('h')
    a.fromfile(fid,1)
w=a[0]
    return w

下至:

def ReadDouble(fid, Addr):
fid.seek(Addr,0)
    a=array.array('d')
    a.fromfile(fid,1)
d=a[0]
    return d

继续只使用我已经完成的文件会更好吗?或者我应该尝试将代码更改为使用数组而不是文件?我在这里不知所措。

1 个答案:

答案 0 :(得分:0)

经过几天的挖掘,我发现了一个类似的代码来做我想做的事情,并以此为例。可以找到代码here