2011-06-09 82 views
2

我有一個大的ieee 32位浮點數的二進制文件。蟒蛇閱讀(4)返回一個長度爲1的字符串不是4

在蟒我使用:

f = file.read(4) 
    while f !='': 
     if len(f) == 4: 
      data =struct.unpack('>f', f) 
      print data 
f = file.read(4) 

到4個字節在一個時間

然而讀它,偶爾˚F將大小爲1,和struct.unpack會抱怨其輸入必須是字符串大小爲4.

文件大小可以被4整除,並且在文件內發生多次。

這可能是什麼原因造成的?

回答

4

您是否以二進制模式打開文件?

無論如何,讀取文件的更好方法是使用array.fromfile()或NumPy。

3

首先,我建議不要使用單詞file作爲變量,因爲它是__builtin__函數。

其次,二進制模式還是ascii模式?

+0

Bah><忘記了Windows對待文本和二進制文件的不同。 – 2011-06-09 18:40:34

+1

您也可以將所有文件視爲二進制文件,這在技術上是正確的; p – Pwnna 2011-06-09 18:44:54

3

看到這個頁面:file.read

具體

還要注意的是,當在非阻塞模式,可以返回比請求更少的數據,即使是沒有給出尺寸參數。

+0

OP非常不可能以非阻塞模式打開文件。在Windows上,這甚至不可能。 – 2011-06-09 23:03:30