バイナリ エンコードされた 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 はファイルからはるかに大きなデータセットを読み取ることができます。このエラーが発生する理由について誰か考えがありますか?