Python 无法将文件从CSV转换为Excel
正在尝试将csv文件的文件夹列表转换为excel。不幸的是,它们中的大多数都不起作用,我还遇到以下错误。当我通过excel前端执行同样的操作时,从csv保存它们就可以了。你知道我做错了什么吗Python 无法将文件从CSV转换为Excel,python,excel,python-2.7,csv,character-encoding,Python,Excel,Python 2.7,Csv,Character Encoding,正在尝试将csv文件的文件夹列表转换为excel。不幸的是,它们中的大多数都不起作用,我还遇到以下错误。当我通过excel前端执行同样的操作时,从csv保存它们就可以了。你知道我做错了什么吗 import os import glob import csv import openpyxl # from https://pythonhosted.org/openpyxl/ or PyPI (e.g. via pip) for csvfile in glob.glob(os.path.join('
import os
import glob
import csv
import openpyxl # from https://pythonhosted.org/openpyxl/ or PyPI (e.g. via pip)
for csvfile in glob.glob(os.path.join('.', '*.csv')):
wb = openpyxl.Workbook()
ws = wb.active
with open(csvfile, 'rb') as f:
reader = csv.reader(f)
for r, row in enumerate(reader, start=1):
for c, val in enumerate(row, start=1):
ws.cell(row=r, column=c).value = val
wb.save(csvfile + '.xlsx')
获取以下错误:
(最近一次通话最后一次):
文件“C:\Users\test\Documents\ConvertCSVtoXLSX\2007+.py”,第14行,在
ws.cell(行=r,列=c).value=val
文件“C:\Python27\ArcGIS10.7\lib\site packages\openpyxl\cell\cell.py”,第272行,值
自我约束值(值)
文件“C:\Python27\ArcGIS10.7\lib\site packages\openpyxl\cell\cell.py”,第229行,在\u bind\u值中
值=自我检查字符串(值)
文件“C:\Python27\ArcGIS10.7\lib\site packages\openpyxl\cell\cell.py”,第180行,检查字符串
value=unicode(值,自编码)
UnicodeDecodeError:“utf8”编解码器无法解码位置30中的字节0xa0:无效的开始字节
看起来pyopenxl期望它将接收编码为UTF-8的数据,但是您传递给它的数据有其他编码——可能是Windows cp*代码页之一。您可以通过调用来确定系统的默认编码。让我们假设它是
cp1252
在回溯中,我们可以看到这是失败的一行:
unicode(value, self.encoding)
导致此错误的原因:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 30: invalid start byte
pyopenxl试图解码它从UTF-8接收到的值,但失败了;我们可以通过在将值传递给pyopenxl之前对其重新编码来解决这个问题
for c, val in enumerate(row, start=1):
fixed_val = unicode(val, 'cp1252').encode('utf-8')
ws.cell(row=r, column=c).value = fixed_val
如果可能有些文件编码为UTF-8,有些文件编码为系统的默认编码,则可能需要将原始分配包装在try/except块中
for c, val in enumerate(row, start=1):
try:
ws.cell(row=r, column=c).value = val
except UnicodeDecodeError:
fixed_val = unicode(val, 'cp1252').encode('utf-8')
ws.cell(row=r, column=c).value = fixed_val
试着用
'r'
代替'rb'
我已经试过了,似乎还是不起作用。我还注意到,使用脚本转换文件与直接使用excel16保存文件时,文件大小不同。这可能是因为脚本的限制吗