2 votes

Format modifié lors de la conversion de Python csv vers xls

Mon objectif est de convertir des fichiers csv situés dans un répertoire en fichiers xls.

Mes fichiers csv sont notamment composés d'une ligne "marque" (ex : 1.0000, 2.0000 ...) et d'une ligne "date" (ex : 26/04/2013). Le format de ces deux lignes est très important pour moi.

J'utilise le code suivant :

import sys, csv, xlwt, glob, os
import shutil

def cont_directory ():
    return glob.glob('/home/julien/excel/csv/*.csv')
liste = cont_directory()

try: 
    for i in liste:
        f=open(i, 'rb')
        g = csv.reader ((f), delimiter = ";")
        workbook=xlwt.Workbook()
        sheet= xlwt.Workbook()

        sheet = workbook.add_sheet("To be modified")

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

except: 
    print "epic_fail_Conversion", sys.exc_info()

for i in glob.glob ('/home/julien/excel/csv/*.xls'):
    shutil.copy2 (i, '/home/julien/excel/xls')

try:
    for j in glob.glob('/home/julien/excel/xls/*.xls'):
        os.rename (j, j.replace ('.csv', ''))

except: 
       print "epic_fail_Conversion", sys.exc_info()

print "End"

Ce code fonctionne assez bien et j'ai mes nouveaux fichiers excel.

Le problème est que mes lignes ont été modifiées lors de cette conversion. Par exemple le contenu de la ligne "mark" est 1 au lieu de 1.00000. De plus, le contenu de la ligne "date" est 2013/04/26 au lieu de 26/04/2013.

Savez-vous ce que je pourrais faire pour conserver le format initial des lignes de mes fichiers csv ?

Merci beaucoup.

1voto

MichaelJCox Points 726

Vous pourriez définir des styles pour les dates et les chiffres, puis utiliser une condition pour appliquer le style. Quelque chose comme :

datestyle = xlwt.XFStyle()
datestyle.num_format_str = 'D/M/YYYY' 

numstyle = xlwt.XFStyle()
numstyle.num_format_str = '#,##0.0000'

....

for rowi, row in enumerate(g):
            for coli, value in enumerate(row):
                if coli == 0:  #or wherever your date is, if it's in a fixed spot
                    sheet.write(rowi,coli,value, datestyle)
                elif coli == 1: #or wherever your number is
                    sheet.write(rowi,coli,value, numstyle)
                else:
                    sheet.write(rowi,coli,value)

Désolé si ce n'est pas tout à fait correct, je suis en train de sortir en courant pendant que j'écris. Mais j'espère que cela vous mettra sur la bonne voie.

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