Batch convertendo arquivos csv para xls em um Mac

0

Eu gostaria de converter todos os arquivos csv em um diretório para arquivos xls. Nick T postou este código aqui Como converter em lote .csv para .xls / xlsx

import os
import glob
import csv
import xlwt # from http://www.python-excel.org/

for csvfile in glob.glob(os.path.join('.', '*.csv')):
    wb = xlwt.Workbook()
    ws = wb.add_sheet('data')
    with open(csvfile, 'rU') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, val in enumerate(row):
                ws.write(r, c, val)
    wb.save(csvfile + '.xls')

No entanto, quando eu executo isso, recebo um erro vindo da última linha.

UnicodeDecodeError: o codec 'ascii' não pode decodificar o byte 0xef na posição 0: ordinal não está no intervalo (128)

Alguém sabe como posso me livrar disso? Eu estou trabalhando no Terminal em um Mac.

    
por user1504686 10.07.2017 / 19:19

1 resposta

0

Eu atualizei este código para que ele funcione no python 3.5, obtendo duas linhas fora do loop ( wb = xlwt.Workbook() e wb.save('output.xls') estavam dentro do loop).

 import os
 import glob
 import csv
 import xlwt
 wb = xlwt.Workbook() # put the xlwt out of the loop 
 for csvfile in glob.glob(os.path.join('.', '*.csv')):
         fpath = csvfile.split("/", 1)
         fname = fpath[1].split(".", 1)
         ws = wb.add_sheet(fname[0])
         with open(csvfile, 'r') as f:
            reader = csv.reader(f)
            for r, row in enumerate(reader):
                for c, col in enumerate(row):
                    ws.write(r, c, col)

 #Save the results once the loop is done
 wb.save('output.xls')
    
por 19.03.2018 / 22:22