Ошибка: неподдерживаемый формат или поврежденный файл: ожидаемая запись BOF

Я пытаюсь открыть файл xlsx и просто распечатать его содержимое. Я постоянно сталкиваюсь с этой ошибкой:

import xlrd
book = xlrd.open_workbook("file.xlsx")
print "The number of worksheets is", book.nsheets
print "Worksheet name(s):", book.sheet_names()
print

sh = book.sheet_by_index(0)

print sh.name, sh.nrows, sh.ncols
print

print "Cell D30 is", sh.cell_value(rowx=29, colx=3)
print

for rx in range(5):
    print sh.row(rx)
    print

Распечатывает эту ошибку

raise XLRDError('Unsupported format, or corrupt file: ' + msg)
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found    '\xff\xfeT\x00i\x00m\x00'

Спасибо


person user2353003    schedule 12.05.2013    source источник
comment
Какая у вас версия xlrd?   -  person Joachim Isaksson    schedule 12.05.2013
comment
9.2 Я считаю, что это самый последний   -  person user2353003    schedule 12.05.2013
comment
Для меня это была проблема с кодировкой, это исправило: stackoverflow.com/a/47922247/577652   -  person shlomiLan    schedule 10.07.2020


Ответы (9)


Сообщение об ошибке относится к записи BOF (начало файла) файла XLS. Однако пример показывает, что вы пытаетесь прочитать файл XLSX.

На это есть две возможные причины:

  1. Ваша версия xlrd устарела и не поддерживает чтение файлов xlsx.
  2. Файл XLSX зашифрован и, таким образом, хранится в формате составного документа OLE, а не в формате zip, что делает его для xlrd более старым форматом XLS-файла.

Дважды проверьте, действительно ли вы используете последнюю версию xlrd. Открытие нового файла XLSX с данными всего в одной ячейке должно в этом убедиться.

Однако я предполагаю, что вы столкнулись со вторым условием и что файл зашифрован, поскольку выше вы указываете, что уже используете xlrd версии 0.9.2.

Файлы XLSX зашифровываются, если вы явно применяете пароль книги, но также если вы защищаете паролем некоторые элементы таблицы. Таким образом, можно иметь зашифрованный файл XLSX, даже если вам не нужен пароль для его открытия.

Обновление: см. третий, более вероятный ответ @Btew, что файл открыт в Excel.

person jmcnamara    schedule 13.05.2013

Если вы используете read_excel() для чтения .csv, вы получите сообщение об ошибке

XLRDError: неподдерживаемый формат или поврежденный файл: ожидается запись BOF;

Чтобы прочитать .csv, нужно использовать read_csv(), как это

df1= pd.read_csv("filename.csv")
person Mike Chan    schedule 07.12.2016
comment
Спасибо, сработало :) - ›df1 = pd.read_csv (filename.csv) - person anandhu; 08.07.2020

Есть и третья причина. Тот случай, когда файл уже открыт Excel. Выдает ту же ошибку.

person BStew    schedule 20.04.2016
comment
Эти три предложения сэкономили мне очень много времени и нервов! - person SeánMcK; 14.07.2016

Вы можете получить эту ошибку, если файл xlsx на самом деле является html; вы можете открыть его в текстовом редакторе, чтобы убедиться в этом. Когда я получил эту ошибку, я решил ее с помощью панд:

import pandas as pd
df_list = pd.read_html('filename.xlsx')
df = pd.DataFrame(df_list[0])
person Pluto    schedule 07.01.2017

Всем, кто сегодня читает этот пост, мне действительно помогло следующее решение. https://stackoverflow.com/a/46214958/9642876

Файл XLSX, который я пытался прочитать, был создан программой для создания отчетов, и он не мог быть прочитан ни pandas, ни xlrd, но мог открыть его в Microsoft Excel. Я повторно сохранил файл под другим именем, и теперь xlrd и pandas могут его прочитать.

Это также может сработать, если вы просто повторно сохраните с тем же именем, хотя я этого не тестировал.

person Samuel Gottipalli    schedule 17.07.2020

В моем случае кто-то дал мне файл Excel с расширением «.xls». Я попытался разобрать его с помощью xlrd и получил следующую ошибку:

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found "blar blar blar"

Поработав некоторое время, я обнаружил, что файл .xls на самом деле является текстовым файлом. Отправитель не удосужился создать настоящий двоичный файл Excel, а просто поместил «.xls» в текстовый файл.

Возможно, стоит открыть файл в текстовом редакторе, чтобы убедиться, что это файл Excel. Это могло сэкономить мне один час.

person ken_a    schedule 03.05.2020

В моем случае проблема заключалась в самой общей папке.

ВАЖНЫЙ СЛУЧАЙ: У меня есть общая папка на сервере WIN2012, где пользователь удаляет файл .xlsx, а затем использует мой скрипт python для загрузки этого файла xlsx в таблицу базы данных.

Несмотря на то, что пользователь удалил старый файл и поместил в файл, который должен был быть загружен, ошибка BOF продолжала упоминать байтовую строку и имя пользователя в байтовой строке - нет, где внутри файла xlsx на любом листе там было имя пользователя. Вдобавок ко всему, когда я скопировал .xlsx во вновь созданную папку и запустил скрипт, ссылающийся на эту новую папку, он сработал.

В конце концов, я удалил общую папку и понял, что 5 элементов были удалены, хотя только 1 элемент был виден мне и пользователю. Я думаю, что это связано с отсутствием у меня навыков администрирования Windows, но это было виновником.

person Ali Khan    schedule 10.01.2019

У меня такое же сообщение об ошибке. Мне это кажется таким странным, потому что сценарий работает с файлами xlsx в другой папке, и файлы почти такие же.

Я до сих пор не знаю, почему это произошло. Но в конце концов я скопировал все файлы Excel в другую папку, и скрипт заработал. Возможность попробовать, если ни одно из приведенных выше предложений не работает для вас ...

person jxshen    schedule 13.04.2019

Это также происходит, когда файл, используемый скриптом, также открыт в фоновом режиме.

person Sailendra Pinupolu    schedule 14.06.2020