Comment puis-je lire un fichier Excel en Python à l'aide de xlrd? Peut-il lire les nouveaux formats de Office?
Ma question est ci-dessous, mais serait intéressé les commentaires de tous ceux ayant de l'expérience avec xlrd.
Je viens de trouver xlrd et il semble que la solution parfaite, mais je vais avoir un petit problème de mise en route. Je cherche à extraire des données par programmation à partir d'un fichier Excel que j'ai sorti de Dow Jones avec les composantes actuelles de l'indice Dow Jones Industrial average (lien: http://www.djindexes.com/mdsidx/?event=showAverages)
Quand j'ouvre le fichier non modifié-je obtenir un méchant BIFF erreur (binary format non reconnu)
Cependant vous pouvez le voir dans cette capture d'écran que Excel 2008 pour Mac pense qu'il est dans 'Excel 1997-2004' format (capture d'écran: http://skitch.com/alok/ssa3/componentreport-dji.xls-properties)
Si j'ai plutôt l'ouvrir dans Excel manuellement et de les enregistrer sous " Excel 1997-2004 format explicitement, puis ouvrez-le dans python usig xlrd, tout est merveilleux. Rappelez-vous, le Bureau pense que le fichier est déjà dans Excel 1997-2004 format. Tous les fichiers sont .xls
Ici est un pastebin d'un ipython session de la réplication de la question: http://pastie.textmate.org/private/jbawdtrvlrruh88mzueqdq
Toute réflexion sur:
Comment tromper xlrd en reconnaissant le fichier afin que je puisse extraire les données?
Comment utiliser python pour automatiser l'explicite "enregistrer sous" format à un xlrd va accepter?
Le Plan B?
OriginalL'auteur |
Vous devez vous connecter pour publier un commentaire.
FWIW, je suis l'auteur de xlrd, et le responsable de xlwt (un fork de pyExcelerator). Quelques points:
Le fichier ComponentReport-DJI.xls est mal nommée; il n'est pas un fichier XLS, c'est un onglet fichier de valeurs séparées. L'ouvrir avec un éditeur de texte (par exemple Notepad) et vous verrez ce que je veux dire. Vous pouvez aussi regarder le pas-très-raw raw octets avec Python:
Vous pouvez lire ce fichier à l'aide de Python csv module ... il suffit d'utiliser
delimiter="\t"
à votre appel à l'csv.reader()
.xlrd peut lire n'importe quel fichier que pyExcelerator peut lire de mieux—dates ne viennent pas que des flotteurs, et l'histoire complète sur Excel dates est dans le xlrd de la documentation.
pyExcelerator est abandonware—xlrd et xlwt sont bel et bien vivant. Découvrez http://groups.google.com/group/python-excel
HTH
Jean
OriginalL'auteur
xlrd de soutien de Bureau 2007/2008 (OpenXML) le format est en alpha test - voir le post suivant dans le python-excel de groupe de discussion:
http://groups.google.com/group/python-excel/msg/0c5f15ad122bf24b?hl=en
Ce qui a été publié il y a quelques jours dans v0.8: groups.google.com/forum/?fromgroups#!topic/python-excel/...
OriginalL'auteur
Plus d'infos sur pyExcelerator: Pour lire un fichier, faites ceci:
où nomfichier est une chaîne qui représente le nom du fichier à lire (et pas un fichier comme objet). Cela vous donnera une structure de données représentant le classeur: une liste de paires, où le premier élément de la paire est le nom de la feuille et le deuxième élément est la feuille de calcul des données.
Les données de feuille de calcul est un dictionnaire dont les clés sont (ligne, col) paires (commençant à 0) et les valeurs sont le contenu de la cellule -- généralement de type int, float ou chaîne. Ainsi, par exemple, dans le cas simple de toutes les données sur la première feuille de calcul:
Si la cellule est vide, vous obtiendrez un KeyError. Si vous faites affaire avec des dates, ils peut (j'en oublie) comme des entiers ou des flotteurs; si c'est le cas, vous aurez besoin de convertir. Fondamentalement, la règle est la suivante: datetime.datetime(1899, 12, 31) + datetime.timedelta(j=n), mais qui peut être désactivé par 1 ou 2 (car Excel traite les années 1900 comme une année bissextile pour la compatibilité avec Lotus, et parce que je ne me souviens pas si 1900-1-1 est 0 ou 1), afin de faire quelques essais et d'erreurs pour vérifier. Datetimes sont stockés sous la flotte, je pense que (les jours et les fractions de jour).
Je pense qu'il y a une prise en charge partielle pour forumulas, mais je ne garantie rien.
OriginalL'auteur John Fouhy
Bien voici un code que j'ai fait: (regardez en bas): ici
Ne savez pas sur les formats les plus récents - si xlrd ne pouvez pas le lire, xlrd besoin d'avoir une nouvelle version !
OriginalL'auteur Michael Neale
Devez-vous utiliser xlrd? Je viens de télécharger", mise à JOUR - Moyenne Industrielle de Dow Jones Déménageurs de 2008 " de ce site web et n'eut aucun mal à le lire avec pyExcelerator.
Il ne semble pas être beaucoup de documentation disponible pour pyExcelerator. Pourriez-vous me montrer les bases de l'ouverture d'un fichier et d'extraction de données?
OriginalL'auteur John Fouhy