0

バイナリ エンコードされた 32 ビット整数のファイルを読み取り、適切に解析するスクリプトを matlab から翻訳しています。matlab の fread() 関数を模倣することを目的とした次のメソッドを作成しました。

def readi(f,n):        
    x = zeros(n,int);    
    for i in range(0,n):
        x[i] = struct.unpack('i',f.read(4))[0];
        print x[i];
    return x;

データを解析するときに、スクリプト内で 1 から 9 までの n を使用して、この関数をさまざまに呼び出します。私の問題は、このエラーが発生する前に、スクリプトがファイルの一部しか取得できないことです。

x[i] = struct.unpack('i',f.read(4))[0];
struct.error: unpack requires a string argument of length 4

ファイルの終わりに達したと python が認識しているようです。エラーが発生する実行ポイントは、すでに数回反復されたループ内の行です。さらに、解析されたファイルの小さな部分は、私の matlab スクリプトがまったく同じファイル (コピーではない) から生成したものと完全に一致しています。ただし、Matlab はファイルからはるかに大きなデータセットを読み取ることができます。このエラーが発生する理由について誰か考えがありますか?

4

1 に答える 1