python read(4)返回长度为1而不是4的字符串

时间:2011-06-09 18:18:21

标签: python io floating-point binaryfiles

我有一个ieee 32位浮点数的大型二进制文件。

在python中我使用:

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整除,并且会在文件中多次发生。

导致这种情况的原因是什么?

3 个答案:

答案 0 :(得分:4)

您是否以二进制模式打开文件?

无论如何,更好的阅读文件的方法是使用array.fromfile()或NumPy。

答案 1 :(得分:3)

首先,我建议不要使用单词file作为变量,因为它是__builtin__函数。

其次,二进制模式还是ascii模式?

答案 2 :(得分:3)

请参阅此页:file.read

具体地

  

另请注意,在非阻塞模式下,即使没有给出大小参数,也可能会返回比请求的数据少的数据。