2013-03-01 6 views
1

Je voudrais ouvrir plusieurs fichiers CSV à partir d'une liste, puis les convertir en fichiers xls.Python: ouvrir les fichiers csv d'une liste et les convertir en xls

Je fait ce code:

import sys, csv, xlwt 

files = ['/home/julien/excel/csv/ABORD2.csv'] 

for i in files: 
    f=open(i, 'rb') 
    g = csv.reader ((f), delimiter=";") 
    workbook=xlwt.Workbook() 
    sheet= xlwt.Workbook() 
    sheet = workbook.add_sheet("Sheet 1") 

    for rowi, row in enumerate(g): 
     for coli, value in enumerate(row): 
      sheet.write(rowi,coli,value) 
     workbook.save(i + ".xls") 

Mes fichiers xls sont created.But dans les deux d'entre eux, je n'ai que le chemin du xls. Par exemple, pour le fichier ABORD.xls que l'expression suivante est écrit:

'/home/julien/excel/csv/ABORD2.xls' 

Auriez-vous des suggestions?

+0

Votre code, à première vue, semble correct pour moi. De plus, il y a * no * variable dans l'exemple de code que vous donnez ici et qui serait toujours égal à ''/ home/julien/excel/csv/ABORD2.xls''; seulement ''/ home/julien/excel/csv/ABORD2.csv.xls'. –

+0

En fait cela fonctionne! Et oui vous avez raison, j'ai oublié de renommer correctement les xls. Merci Martijn! – Julien

Répondre

4

Monsieur, vous créez deux classeurs unnecessairly et vous enregistrez le classeur avec mauvais indentation

import csv, xlwt 

files = ['test.csv'] 

for i in files: 
    f=open(i, 'rb') 
    g = csv.reader ((f), delimiter=";") 
    wbk= xlwt.Workbook() 
    sheet = wbk.add_sheet("Sheet 1") 

    for rowi, row in enumerate(g): 
     for coli, value in enumerate(row): 
      sheet.write(rowi,coli,value) 

    wbk.save(i + '.xls') 
+0

L'indentation fonctionne plutôt bien. Mais merci pour l'aide! – Julien

+2

Eh bien, le code ci-dessus fonctionne très bien pour moi. –

+1

A travaillé pour moi aussi. Je l'ai facilement modifié pour sortir un seul fichier Excel avec plusieurs feuilles de calcul - initialisé le classeur une fois, en dehors de la boucle for et créé des feuilles nommées différemment à l'intérieur de la boucle. J'ai utilisé cette réponse: http://stackoverflow.com/a/9137934/1317713 pour ajuster automatiquement la largeur de la colonne. – Leonid

Questions connexes