Magazine Informatique

Extraire des données d'un fichier Excel avec Python

Publié le 23 décembre 2009 par Luc
Bonjour,

Microsoft Excel, même s'il est de plus en plus concurrencé par Open Office Calc, est un des logiciels les plus connus et les plus utilisés à travers le monde. Qui n'a pas un jours crée un tableau et fait quelques calculs dans ce tableur ou un de ses clones? Dès qu'il s'agit de stocker et de classer des données, on est vite tenté de créer un tableur. Excel est donc devenu un standard de fait pour l'échange des données.

Ainsi, J'ai reçu dernièrement un fichier Excel dont il m'a fallu extraire les données et les insérer dans une base de donnée d'un site internet. Bien évidemment cette tâche peut-être très lourde à exécuter manuellement et j'ai donc réaliser un script Python pour le faire automatiquement.

Il existe plusieurs méthodes pour cela, la plus connue est de piloter Excel grâce à son interface COM. Un interface COM est un composant qui existe dans la plupart des logiciels Microsoft et qui permet à un autre logiciel d'en prendre le contrôle. L'explication est rapide mais j'espère qu'elle éclairera ceux qui n'ont jamais transpiré avec la technologie COM.

Malheureusement, cette solution ne fonctionnait pas pour moi puisque la machine sur laquelle je devais faire l'import est celle de mon hébergeur Internet. Impossible donc d'installer Excel ou OpenOffice. De plus cette machine fonctionne sous Linux.

Heureusement, j'ai découvert le module Python xlrd qui permet de lire un fichier Excel sans avoir Excel et sous n'importe quel OS avec Python. Voila mon problème résolu!

Je vous propose donc un petit script qui montre comment on peut extraire les données d'un fichier Excel avec xlrd. Vous noterez que c'est très simple. La plus grosse difficulté venant de la conversion unicode vers ascii pour éviter les erreurs sur des caractères accentués.


import xlrd
book = xlrd.open_workbook("mon_fichier.xls")
sheet = book.sheet_by_index(0) # ou: sheet_by_name("Ma feuille")
for row_index in xrange(sheet.nrows):
   row= ""
   for col_index in xrange(sheet.ncols):
      value = sheet.cell(rowx=row_index,colx=col_index).value
      if type(value) is unicode:
         value = unicodedata.normalize('NFKD', value).encode('ascii','ignore')
      row += "{0} - ".format(value)
   print row


Je pense que ce module me rendra de grands services: import de données, tests... Peut-être cela sera aussi le cas pour vous.

C'est aussi l'occasion pour moi de vous souhaiter de bonnes fêtes de fin d'année.

Retour à La Une de Logo Paperblog

A propos de l’auteur


Luc 11 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossiers Paperblog

Magazine