2 votes

xlrd : comment lire les feuilles de plusieurs fichiers xl et les stocker dans une liste/un tableau ? (meilleure méthode ?)

Je n'ai pas beaucoup d'expérience avec xlrd/xlwt mais j'ai réussi à accéder à l'un des fichiers dont je veux collecter les données. Je veux collecter les données de tous les fichiers du répertoire et les déplacer sur une feuille. Je me suis dit que s'il y avait un moyen de les stocker dans un tableau/une liste, il serait facile de les convertir en csv. Si c'est trop de travail et qu'il y a un moyen plus simple, merci de m'aider, sinon j'utilise Idle pour jouer avec les idées et j'ai trouvé ceci jusqu'à présent :

>>> import xlrd, xlwt
>>> book = xlrd.open_workbook('c:\excelTry\Papineau.csv.xls')
>>> book.sheet_names()
[u'Charge Codes', u'Month']
>>> sh = book.sheet_by_index(1)
>>> #produces:
>>> sh.book
<xlrd.Book object at 0x01213BF0>
>>> for x in range(0, 10):
        sh.row_values(x)
[u'William Papineau', u'Pay Period 11', '', '', u' ', u' ', '', '', '', u'Weekly Total', '', '', u' ', '', '', '', '', u'Weekly Total', u'Biweekly', u'Percent of Effort']
[u'Index Number', u'Index Description', 40678.0, 40679.0, 40680.0, 40681.0, 40682.0, 40683.0, 40684.0, '', 40685.0, 40686.0, 40687.0, 40688.0, 40689.0, 40690.0, 40691.0, '', u'Total', '']
[u'E45776', u'Seat Belt Study', '', 8.0, 8.0, 8.0, 8.0, u' ', '', 32.0, '', '', '', '', '', u' ', '', 0.0, 32.0, 0.4155844155844156]
[u'E43457', u'MultiScaleWaterQuality', '', '', '', '', '', 8.0, '', 8.0, '', 5.0, 8.0, u' ', '', '', '', 13.0, 21.0, 0.2727272727272727]
[u'E45125', u'GLOSS', '', '', '', '', '', '', '', 0.0, '', '', '', 8.0, 8.0, '', '', 16.0, 16.0, 0.2077922077922078]
[u'E45131', u'GLOS AOC Trib Monitoring', '', '', '', '', '', '', '', 0.0, '', '', '', '', '', 8.0, '', 8.0, 8.0, 0.1038961038961039]

cela produit ce qui ressemble à un objet liste, mais chaque tentative de manipulation ou d'ajout produit des erreurs indiquant que l'objet n'est pas scriptable ou itérable. L'itération des fichiers sera gérée avec le module os en utilisant os.listdir(path) et une boucle for. Toute aide serait grandement appréciée !

3voto

bernie Points 44206

Jusqu'à présent, dans votre code, vous ne semblez pas faire quoi que ce soit avec les valeurs que vous obtenez de la feuille de calcul. Peut-être qu'une partie du code n'a pas été collée dans la question...

Pourriez-vous inclure la sortie de cette dernière ligne de code ?

Vous dites que vous voulez tout stocker dans une seule liste.
Essayez quelque chose comme ceci :

final = []
for rowx in xrange(sh.nrows):
    final.extend(sh.row_values(rowx))

En outre :
Attention aux chemins d'accès à Windows. Les antislashs simples ne fonctionnent que si la lettre suivante ne forme pas, avec l'antislash, une séquence d'échappement (par ex. \t ou de l'onglet). Autres options (l'option 3 est probablement la meilleure, à moins qu'il n'y ait une raison spécifique de ne pas l'utiliser) :

  1. Chaînes brutes : book = xlrd.open_workbook(r'c:\excelTry\Papineau.csv.xls')
  2. Barres obliques vers l'avant : book = xlrd.open_workbook('c:/excelTry/Papineau.csv.xls')
  3. os.path.join :
    book = xlrd.open_workbook(os.path.join('c:','excelTry','Papineau.csv.xls'))

1voto

data = []
for i in xrange(sh.nrows):
    data.append(sh.row_values(i))
it will append each rows from xls file into list "data".
eg: [['a','b'],['c','d'],['e','f']] like this .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X