python xlrd formato non supportto o file danneggiato.

Il mio codice:

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 

L'errore:

 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'" 

Il file non sembra essere danneggiato o di un formato diverso. Tutto ciò che aiuterà a trovare la fonte del problema sarebbe grande.

Tu dici:

Il file non sembra essere danneggiato o di un formato diverso.

Tuttavia, come dice il messaggio di errore, i primi 8 byte del file sono '<table r' … che non è sicuramente formato Excel .xls . Apri con un editor di text (ad esempio Blocco note) che non prenderà alcun preavviso sull'estensione (errata) .xls e vedrai da soli.

Ho avuto un problema simile ed è stato correlato alla versione. In un terminal di pitone:

 >> import xlrd >> xlrd.__VERSION__ 

Se hai '0.9.0' puoi aprire quasi tutti i file. Se hai '0.6.0' che era quello che ho trovato su Ubuntu, puoi avere problemi con i file più recenti di Excel. È ansible scaricare la versione più recente di xlrd utilizzando lo standard Distutils.

Ciò accadrà ad alcuni file mentre è anche aperto in Excel.

Prova ad aprirla con i panda:

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

Oppure prova qualsiasi altro parser html html.

Questo non è un file excel corretto, ma un html leggibile con excel.

Ho trovato il problema simile quando scaricato il file .xls e l'ho aperto utilizzando la libreria xlrd. Poi ho provato la soluzione di convertire .xls in .xlsx come dettagliato qui: come convertire xls in xlsx

Funziona come un fascino e piuttosto che aprire .xls, sto lavorando con il file .xlsx ora utilizzando la libreria openpyxl.

Spero che aiuta a risolvere il tuo problema.

Ho appena scaricato xlrd, ho creato un documento excel (excel 2007) per il test e ho ottenuto lo stesso errore (il messaggio dice 'trovato PK \ x04 \ x14 \ x14 \ x00 \ x06 \ x00'). L'estensione è un xlsx. Provato a salvarlo in un vecchio formato .xls e l'errore scompare …..

Nel mio caso, dopo aver aperto il file con un editor di text come suggerito da @ john-machin, ho capito che il file non è crittografato come un file di Excel dovrebbe essere ma è nel formato CSV e stato salvato come file di Excel. Quello che ho fatto è stato rinominato il file e la sua estensione e utilizzata invece la function read_csv :

 os.rename('sample_file.xls', 'sample_file.csv') csv = pd.read_csv("sample_file.csv", error_bad_lines=False) 

Conosco lo stesso problema.

si trova nel file .xls in se – sembra un file di Excel ma non lo è. (vedi se c'è un pop-up quando apri chiaramente l'.xls da Excel)

sjmachin ha commentato il 19 gennaio 2013 da https://github.com/python-excel/xlrd/issues/26 aiuta.

Ho incontrato questo problema troppo. Ho aperto questo file da excel e lo ho salvato come altri formati come excel 97-2003 e finalmente ho risolto questo problema

non c'è niente di sbagliato con il tuo file. xlrd non support ancora file xlsx (excel 2007+), anche se si suppone che abbia supportto questo per un certo tempo.

Simplistix github

2 giorni fa hanno commesso una versione pre-alfa al loro git che integra il supporto xlsx. Altri forum suggeriscono di utilizzare un parser DOM per i file xlsx dato che il tipo di file xlsx è solo un archivio zip contenente XML. Non ho provato questo. c'è un altro pacchetto con funzionalità simili come xlrd e questo si chiama openpyxl che è ansible get da easy_install o pip. Non lo ho ancora provato, tuttavia, la sua API dovrebbe essere simile a xlrd.