0

Python xlrd: неверный формат или повреждённый файл

16

Я столкнулся с проблемой при работе с файлом Excel в 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 '&lt;table r"'

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

5 ответ(ов)

0

Попробуйте открыть файл как HTML с помощью pandas:

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

Или воспользуйтесь любым другим HTML парсером для Python.

Судя по всему, это не настоящий файл Excel, а HTML, который может быть прочитан в Excel.

0

Вы говорите:

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

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

0

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

0

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

>> import xlrd
>> xlrd.__VERSION__

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

0

Я столкнулся с такой же ошибкой xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; и решил её, написав конвертер из XML в XLSX. Дело в том, что библиотека xlrd не поддерживает файлы в формате XML Spreadsheet (*.xml), то есть файлы не являются ни XLS, ни XLSX.

Ниже приведён код, который демонстрирует, как можно осуществить такую конвертацию с использованием pandas и BeautifulSoup:

import pandas as pd
from bs4 import BeautifulSoup

def convert_to_xlsx():
    with open('sample.xml') as xml_file:  # Замените 'sample.xls' на 'sample.xml'
        soup = BeautifulSoup(xml_file.read(), 'xml')
        writer = pd.ExcelWriter('sample.xlsx')
        for sheet in soup.findAll('Worksheet'):
            sheet_as_list = []
            for row in sheet.findAll('Row'):
                sheet_as_list.append([cell.Data.text if cell.Data else '' for cell in row.findAll('Cell')])
            pd.DataFrame(sheet_as_list).to_excel(writer, sheet_name=sheet.attrs['ss:Name'], index=False, header=False)

        writer.save()

Учтите, что в функции open() необходимо указать правильное расширение файла (в данном случае, sample.xml). Этот код считывает XML-формат, извлекает данные из каждого листа и сохраняет их в формате XLSX, который уже поддерживается библиотеками, такими как pandas.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь