web-dev-qa-db-fra.com

format non supporté par python xlrd ou fichier corrompu.

Mon code: 

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'erreur: 

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

Le fichier ne semble pas être corrompu ou d'un format différent. Tout pour aider à trouver la source du problème serait formidable. 

21
wDroter

Vous dites: 

Le fichier ne semble pas être corrompu ou d'un format différent.

Cependant, comme l'indique le message d'erreur, les 8 premiers octets du fichier sont '<table r' ... qui n'est définitivement pas au format Excel .xls. Ouvrez-le avec un éditeur de texte (Bloc-notes, par exemple) qui ne prendra pas en compte l'extension (incorrecte) .xls et constatez-le par vous-même.

27
John Machin

Essayez de l'ouvrir avec des pandas:

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

Ou essayez un autre analyseur HTML Python.

Ce n'est pas un fichier Excel, mais un fichier HTML lisible avec Excel.

13
foebu

J'ai eu un problème similaire et il était lié à la version. Dans un terminal python, vérifiez:

>> import xlrd
>> xlrd.__VERSION__

Si vous avez '0.9.0' vous pouvez ouvrir presque tous les fichiers. Si vous avez '0.6.0' qui est ce que j'ai trouvé sur Ubuntu, vous pouvez avoir des problèmes avec les fichiers Excel les plus récents. Vous pouvez télécharger la dernière version de xlrd en utilisant le standard Distutils. 

8
Silveira Neto

Cela va arriver à certains fichiers alors qu’ils sont également ouverts dans Excel.

4
user1479095

J'ai trouvé le même problème lors du téléchargement du fichier .xls et je l'ai ouvert à l'aide de la bibliothèque xlrd. Ensuite, j'ai essayé la solution de conversion .xls en .xlsx comme détaillé ici: comment convertir xls en xlsx

Cela fonctionne comme un charme et plutôt que d'ouvrir .xls, je travaille avec le fichier .xlsx en utilisant la bibliothèque openpyxl.

J'espère que cela vous aidera à résoudre votre problème.

3
Ira Noviani

Dans mon cas, après avoir ouvert le fichier avec un éditeur de texte comme suggéré par @ john-machin, j’ai réalisé que le fichier n’était pas crypté, mais qu’il était au format CSV et qu’il était enregistré au format Excel. Ce que j'ai fait a été renommé le fichier et son extension et utilisé la fonction read_csv à la place: 

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

J'ai eu le même problème. Ces anciens fichiers sont formatés comme un fichier délimité par des tabulations. J'ai pu ouvrir mes fichiers de problèmes avec read_table; c'est-à-dire df = pd.read_table('trouble_maker.xls').

0
mbauer

Je rencontre le même problème.

il se trouve dans le fichier .xls lui-même - il ressemble à un fichier Excel, mais ce n'est pas le cas. (voyez s'il y a un pop-up lorsque vous ouvrez les fichiers .xls d'Excel)

sjmachin a commenté le 19 janvier 2013 de https://github.com/python-Excel/xlrd/issues/26 help.

0
Mark K

Je viens de télécharger xlrd, de créer un document Excel (Excel 2007) à tester et d’obtenir la même erreur (le message «PK détecté\x03\x04\x14\x00\x0\x0\x00»). L'extension est un xlsx. J'ai essayé de l'enregistrer dans un format .xls plus ancien et l'erreur disparaît .....

0
userrenren

J'ai aussi ouvert ce fichier. J'ai ouvert ce fichier avec Excel et je l'ai enregistré sous d'autres formats, comme Excel 97-2003, et j'ai finalement résolu le problème.

0
TruelyBob