Python xlrd неподдерживаемый формат или поврежденный файл.
Мой код:
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'"
Файл, похоже, не поврежден или не имеет другого формата.
Все, что поможет найти источник проблемы, было бы здорово.
Ответы
Ответ 1
Вы говорите:
Файл не выглядит поврежденным или отличается от другого.
Однако, как говорится в сообщении об ошибке, первые 8 байтов файла '<table r'
... это определенно не формат Excel .xls
. Откройте его с помощью текстового редактора (например, "Блокнот" ), который не будет обращать внимания на (неправильное) расширение .xls
и сам убедиться.
Ответ 2
У меня была аналогичная проблема, и она была связана с версией. В терминале python проверьте:
>> import xlrd
>> xlrd.__VERSION__
Если у вас '0.9.0', вы можете открыть почти все файлы. Если у вас есть '0.6.0', что я нашел на Ubuntu, у вас могут возникнуть проблемы с новейшими файлами Excel. Вы можете загрузить последнюю версию xlrd, используя стандарт Distutils.
Ответ 3
Это произойдет с некоторыми файлами, а также в Excel.
Ответ 4
Попробуйте открыть его с помощью pandas:
import pandas as pd
data=pd.read_html(filename.xls)
Или попробуйте любой другой синтаксический анализатор html python.
Это не правильный файл excel, а html, читаемый с помощью excel.
Ответ 5
Я нашел подобную проблему при загрузке файла .xls и открыл ее с помощью библиотеки xlrd. Затем я опробовал решение конвертации .xls в .xlsx, как описано здесь: как конвертировать xls в xlsx
Он работает как шарм и вместо открытия .xls, теперь я работаю с файлом .xlsx, используя библиотеку openpyxl.
Надеюсь, что это поможет решить вашу проблему.
Ответ 6
Я только что загрузил xlrd, создал документ excel (excel 2007) для тестирования и получил ту же ошибку (сообщение говорит "найдено PK\x03\x04\x14\x00\x06\x00 '). Расширение - xlsx. Попробовал сохранить его в более раннем формате .xls и ошибка исчезла.....
Ответ 7
В моем случае, после открытия файла текстовым редактором в качестве предлагаемого @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)
Ответ 8
Я встречаю ту же проблему.
он лежит в самом файле .xls - он выглядит как файл Excel, но это не так. (см. всплывающее окно, когда вы открыто открываете .xls из Excel)
sjmachin прокомментировал 19 января 2013 г. из https://github.com/python-excel/xlrd/issues/26.
Ответ 9
Я тоже встретил эту проблему. Я открыл этот файл excel и сохранил его как другие форматы, такие как excel 97-2003, и, наконец, я решил эту проблему.
Ответ 10
Нет ничего плохого в вашем файле. xlrd пока не поддерживает файлы xlsx (excel 2007+), хотя он якобы поддерживал это в течение некоторого времени.
Simplistix github
2 дня назад они перенесли альфа-версию своих git, которая интегрирует поддержку xlsx. Другие форумы предлагают использовать парсер DOM для файлов xlsx, так как тип файла xlsx - это просто zip-архив, содержащий XML. Я этого не пробовал. есть еще один пакет с аналогичной функциональностью, такой как xlrd, и это называется openpyxl, который вы можете получить из easy_install или pip. Я тоже этого не пробовал, однако его API должен быть похож на xlrd.