2011-06-09 65 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