我正在翻譯matlab腳本,它讀取一個二進制編碼的32位整數文件,並適當地解析它們。我寫了下面的方法旨在模仿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
看來,蟒蛇認爲我已經達到了文件的末尾。發生錯誤的執行點是循環中的一條線,已經迭代了好幾次。另外,已經解析過的文件的一小部分已經完全匹配我的matlab腳本從完全相同的文件(而不是副本)產生的內容。但是,Matlab能夠從文件中讀取更大的數據集。有沒有人有關於爲何發生此錯誤的想法?
向我們展示打開文件對象的代碼。它是以文本模式而不是二進制模式打開的嗎? – agf
這裏一個顯而易見的錯誤是您沒有定義輸入值的字節順序。另一件事是,結構模塊會告訴你需要多少字節,使用該信息來避免錯誤。 –
您可以通過捕獲struct.error並打印f.tell()來進行完整性檢查。如果它打印的文件的大小,你知道這個問題不在這一點的代碼。 – tdelaney