我有一个使用 xlwt/xlrd 处理 excel 文件的 python 脚本。在我的脚本的开头,我有以下代码:
#if you got a csv in parameters, convert it to an xls file
if '.csv' in sys.argv[1]:
#name of new file after conversion is finished
name = sys.argv[1]
csvfile = open(sys.argv[1], 'rb')
try:
#extract data from .csv
csvReader = csv.reader(csvfile, delimiter=' ', quotechar='|')
csvData = list(csv.reader(open(name, 'rb')))
# write to a xls file
outFile = xlwt.Wrokbook()
newSheet = outFile.add_sheet('Sheet 1')
# traverse over 2d array to write each individual cell
for row in range(len(csvData)):
for col in range(len(csvData[0])):
newSheet.write(row, col, csvData[row][col].encode('utf8'))
name = name[:-4] + ".xls" #change extension of file
outFile.save(name)
wb = open_workbook(name)
finally:
csvfile.close()
这给出了错误
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 44: ordinal not in range(128)
就行 outFile.save(name)
到目前为止,我发现的唯一有用的东西是UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 1,但我的终端使用 utf8 作为其编码。
编辑:完全忘记提及这一点,很抱歉。
我相信带有 .encode 的行以某种方式导致了错误,但我想不出如何。我最初没有.encode,然后我添加了.encode('utf8'),还尝试了.encode('utf-8')和unicode(string,'utf8')。我不确定还有什么方法可以解决这个问题。
编辑:我尝试了布赖恩的建议,但无济于事。此外,我尝试了 codecs.open 建议,还尝试在创建工作簿时指定编码。这些都不会改变错误。我尝试过的唯一改变错误的方法是在 newSheet.write 的行上添加 .encode。没有它,我得到:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 44: ordinal no in range(128)
有了它,我得到:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 44: ordinal not in range(128)