2013-04-25 3 views
2

Моя цель - преобразовать файлы csv, локализованные в каталоге, в файлы xls.Формат, измененный во время преобразования Python csv в xls

Мои файлы csv состоят из строки «mark» (например, 1.0000, 2.0000 ...) и строки «date» (например, 26/04/2013). Формат этих двух строк очень важен для меня.

Я использую следующий код:

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" 

Этот код работает довольно хорошо, и у меня есть новые Excel файлов.

Проблема в том, что мои строки были изменены во время этого преобразования. Например, содержание строки «mark» равно 1 вместо 1.00000. Кроме того, содержание строки «дата» - 2013/04/26 вместо 26/04/2013.

Знаете ли вы, что я могу сделать, чтобы сохранить исходные строки формата моих файлов csv?

спасибо.

+1

Эта запись в блоге может помочь: http://www.youlikeprogramming.com/2011/04/examples-generating-excel-documents-using-pythons-xlwt/ – ditkin

ответ

1

Вы можете определить стили для дат и цифр, а затем использовать условное выражение для применения стиля. Что-то вроде:

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) 

Извините, если это не совсем так, я выбегаю из двери, когда я это записываю. Но, надеюсь, это поможет вам в правильном направлении.

+0

Спасибо вам обоим! В конце концов он работал с использованием предложения «encoding = 'ascii». – Julien

Смежные вопросы