Python xlrd неподдерживаемый формат или поврежденный файл. - PullRequest
21 голосов
/ 08 марта 2012

Мой код:

import xlrd
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls")
sh = wb.sheet_by_index(0)
print sh.cell(0,0).value

Ошибка:

Traceback (most recent call last):
File "Z:\Wilson\tradedStockStatus.py", line 18, in <module>
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls")
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 429, in open_workbook
biff_version = bk.getbof(XL_WORKBOOK_GLOBALS)
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1545, in getbof
bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8])
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1539, in bof_error
raise XLRDError('Unsupported format, or corrupt file: ' + msg)
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record;
found '<table r'"

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

Ответы [ 11 ]

27 голосов
/ 09 марта 2012

Вы говорите:

Файл не поврежден или имеет другой формат.

Однако, как говорится в сообщении об ошибке, первые 8 байтов файла имеют формат '<table r' ..., что определенно не в формате Excel .xls. Откройте его с помощью текстового редактора (например, Блокнота), который не будет обращать внимания на (неправильное) расширение .xls, и убедитесь сами.

14 голосов
/ 13 июля 2014

Попробуйте открыть его пандами:

import pandas as pd
data = pd.read_html('filename.xls')

Или попробуйте любой другой html-анализатор python.

Это не правильный файл Excel, а html, который можно прочитать с помощью Excel.

8 голосов
/ 15 марта 2013

У меня была похожая проблема, и она была связана с версией. В терминале Python проверьте:

>> import xlrd
>> xlrd.__VERSION__

Если у вас есть '0.9.0' , вы можете открыть почти все файлы. Если у вас '0.6.0' , который я нашел в Ubuntu, у вас могут быть проблемы с новейшими файлами Excel. Вы можете скачать последнюю версию xlrd, используя стандарт Distutils.

6 голосов
/ 27 июня 2013

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

4 голосов
/ 05 января 2016

Я обнаружил похожую проблему при загрузке файла .xls и открыл его с помощью библиотеки xlrd. Затем я опробовал решение для преобразования .xls в .xlsx, как описано здесь: как конвертировать xls в xlsx

Он работает как шарм, и вместо открытия .xls я работаю с файлом .xlsx, используя библиотеку openpyxl.

Надеюсь, это поможет решить вашу проблему.

2 голосов
/ 09 июля 2015

В моем случае, после открытия файла в текстовом редакторе, как предложил @ john-machin, я понял, что файл не зашифрован, как предполагается, для файла Excel, но в формате CSV и был сохранен как файл Excel. То, что я сделал, было переименовано в файл и его расширение и вместо него использовалось read_csv:

os.rename('sample_file.xls', 'sample_file.csv')
csv = pd.read_csv("sample_file.csv", error_bad_lines=False)
0 голосов
/ 01 марта 2018

У меня была такая же проблема. Эти старые файлы отформатированы как файлы с разделителями табуляции. Я смог открыть мои проблемные файлы с read_table; т.е. df = pd.read_table('trouble_maker.xls').

0 голосов
/ 04 августа 2016

Я также столкнулся с этой проблемой. Я открыл этот файл в Excel и сохранил его в других форматах, таких как Excel 97-2003, и, наконец, я решил эту проблему

0 голосов
/ 23 июля 2015

Я сталкиваюсь с той же проблемой.

лежит в самом файле .xls - выглядит как файл Excel, но это не так. (посмотрите, есть ли всплывающее окно, когда вы откроете .xls из Excel)

sjmachin прокомментировал 19 января 2013 г. с https://github.com/python-excel/xlrd/issues/26 помогает.

0 голосов
/ 15 апреля 2012

нет ничего плохого в вашем файле.xlrd еще не поддерживает файлы xlsx (excel 2007+), хотя предполагается, что он поддерживал это в течение некоторого времени.

Simplistix github

2 дня назад они совершилипредварительная альфа-версия для их git, которая включает поддержку xlsx.Другие форумы предполагают, что вы используете парсер DOM для файлов xlsx, поскольку тип файла xlsx - это просто zip-архив, содержащий XML.Я не пробовал это.есть еще один пакет с функциональностью, аналогичной xlrd, и он называется openpyxl, который вы можете получить из easy_install или pip.Я также не пробовал это, однако, его API должен быть похож на xlrd.

...