我正在尝试将脚本从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');
这些函数已经使用:
转换为pythondef 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
继续只使用我已经完成的文件会更好吗?或者我应该尝试将代码更改为使用数组而不是文件?我在这里不知所措。