【发布时间】:2018-09-27 15:56:41
【问题描述】:
我正在使用 python2.7。我不能使用 python 3。我写这个是为了将一个 excel 电子表格转换为 csv。它为“u2013”引发错误,这是一个“破折号”字符。在 perl - 您可以使用 open 命令加载 unicode 文件,但我不知道如何在 python 中执行此操作。
#!/home/casper/python/core/2.7.14/exec/bin/python2.7
# -*- coding: utf-8 -*-
import openpyxl
import csv
wb = openpyxl.load_workbook('RiskLimitSnapshot.xlsx')
sh = wb.get_active_sheet()
with open('goodRiskLimitSnapshot.csv', 'wb') as f:
c = csv.writer(f)
for r in sh.rows:
c.writerow([cell.value for cell in r])
错误:
Traceback (most recent call last):
File "/home/casper/pyExceltoCSV", line 16, in <module>
c.writerow([cell.value for cell in r])
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 74: ordinal not in range(128)
我将脚本更改为使用 io.open:
wb = openpyxl.load_workbook('DailyETRiskLimitSnapshot.xlsx' , data_only=True)
sh = wb.get_active_sheet()
with io.open('goodDailyETRiskLimitSnapshot.csv', 'w', encoding='utf8') as f:
c = csv.writer(f, dialect='excel')
for r in sh.rows:
c.writerow([cell.value for cell in r])
但是它抛出了一个不同的错误:
Traceback (most recent call last):
File "./pyExceltoCVS.py", line 20, in <module>
c.writerow([cell.value for cell in r])
TypeError: write() argument 1 must be unicode, not str
【问题讨论】:
-
wb = openpyxl.load_workbook('DailyETRiskLimitSnapshot.xlsx',encoding_override="cp1252") 我正在寻找这样的功能 - 在 load_workbook 函数中对 excel 进行编码
-
“我收到一个“u'\u2013'”错误,我认为它是连字符的符号” U+2013 是 EN 的 Unicode 代码点DASH,但我不知道你所说的额外的
u和单引号是什么意思。 -
编辑了 Borodin - 它在 python 的错误代码中,但可能不应该在标题中。
-
Excel 电子表格中只有一个选项卡 - 一张表中没有多个工作簿。
-
您的问题不在于读取 - 它工作正常,并且正在加载 unicode。您只需要弄清楚如何将 unicode 写入 csv。为此,请使用
cell.value.decode()从 str 转到 unicode...