在 Mac 上批量将 csv 文件转换为 xls

在 Mac 上批量将 csv 文件转换为 xls

我想将目录中的所有 csv 文件转换为 xls 文件。Nick T 在此处发布了此代码如何将 .csv 批量转换为 .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')

但是,当我运行这个程序时,我收到来自最后一行的错误。

UnicodeDecodeError:'ascii'编解码器无法解码位置 0 处的字节 0xef:序数不在范围内(128)

有人知道我该如何摆脱这个问题吗?我在 Mac 上的终端上工作。

答案1

我更新了此代码,以便它可以在 python 3.5 上运行,方法是从循环中获取两行(wb = xlwt.Workbook()wb.save('output.xls')在循环内)。

 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')

相关内容