python read (4) возвращает строку длины 1, а не 4 - PullRequest
2 голосов
/ 09 июня 2011

У меня большой двоичный файл из 32-разрядных чисел с плавающей точкой ieee.

В питоне я использую:

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 ]

4 голосов
/ 09 июня 2011

Вы открывали файл в двоичном режиме?

В любом случае, гораздо лучший способ прочитать ваш файл - использовать array.fromfile() или NumPy.

3 голосов
/ 09 июня 2011

См. Эту страницу: file.read

В частности

Также обратите внимание, что в неблокирующем режиме может быть возвращено меньше данных, чем было запрошено, даже если не задан параметр размера.

3 голосов
/ 09 июня 2011

Прежде всего, я рекомендую не использовать слово file в качестве переменной, так как это __builtin__ функция.

Во-вторых, двоичный режим или режим ascii?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...