2016-08-02 12 views
-1

MatlabからPythonにスクリプトを更新しようとしていますが、1つのセクションに問題があります。このコードは、バイナリファイルを読み込んで、プロットを作成するために使用できるものに変換します。PythonでBig Endian形式またはLower Endian形式でファイルを読む方法

私はとのトラブルを抱えてい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'); 

などなどへ:

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 

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

これらの機能は、すでに使用してのpythonに翻訳されています

すでに完了しているようなファイルだけを続行する方が良いでしょうか?または、ファイルからではなく配列で作業するようにコードを変更する必要がありますか?私はここで紛失している。

+0

これはエンディアンを変更しません。ファイルを読むときに使用するエンディアンを指定します。 'fid'はあとでファイルから読み込むために使用される可能性があります。これらのファイルから読み込むものが配列と何を持っているかははっきりしていません。 – Suever

+0

fidはfid.seek()で使用され、バイナリは8ビットで読み込まれ、16ビットなどは整数として配列にインクリメントされます。この配列は、データのプロットを作成するために使用されます。それはそれをより明確にしますか? – SanticL

+0

ファイルオープン後にMatlabコードの行を表示しなければなりません。実際の 'fread'命令があり、それをあなたのポストに置く必要があります。コメントから、16ビット(2バイト)の値を読み取る必要があるように見えますが、確かに関連するコード行を見る必要があります。 – Hoki

答えて

0

数日の掘り起こしの後、私は同じコードを見つけて、私が望んだことをして、それを例として使用しました。コードはhereです。

関連する問題