2013-04-25 4 views
2

Mon but est de convertir les fichiers csv localisés dans un répertoire en fichiers xls.Format modifié lors de la conversion de csv en xls en Python

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

-je utiliser 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 pendant cette conversion. Par exemple le contenu de la ligne "mark" est 1 au lieu de 1.00000. Par ailleurs, le contenu de la ligne "date" est le 2013/04/26 au lieu du 26/04/2013.

Savez-vous ce que je pourrais faire, afin de conserver les lignes de format initial de mes fichiers csv?

Merci beaucoup.

+1

Cette entrée de blog peut vous aider: http://www.youlikeprogramming.com/2011/04/examples-generating-excel-documents-using-pythons-xlwt/ – ditkin

Répondre

1

Vous pouvez définir des styles pour les dates et les nombres, puis utiliser un conditionnel 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 raison, je suis à court de porte que je l'écris. Mais j'espère que cela vous met dans la bonne direction.

+0

Merci à vous deux! Il a finalement travaillé en utilisant la clause "encoding = 'ascii'". – Julien

Questions connexes