如何从 Python 中的 Big 或 Lower Endian 格式的文件中读取
How to read from file in Big or Lower Endian format in Python
我正在尝试将脚本从 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 恐惧:
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
像我已经完成的那样只继续处理文件会更好吗?或者我应该尝试将代码更改为使用数组而不是从文件中使用?我在这里不知所措。
经过几天的挖掘,我找到了一个类似的代码来做我想做的事情,并以此为例。可以找到代码 here.
我正在尝试将脚本从 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 恐惧:
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
像我已经完成的那样只继续处理文件会更好吗?或者我应该尝试将代码更改为使用数组而不是从文件中使用?我在这里不知所措。
经过几天的挖掘,我找到了一个类似的代码来做我想做的事情,并以此为例。可以找到代码 here.