python xlrd 将 xlsx 转换为 csv

标签 python xlrd

我正在尝试使用 xlrd 库将 excel 文件转换为 csv 文件。

但是我得到了这个错误:

UnicodeEncodeError: 'ascii' 编解码器无法对位置 2 中的字符 u'\u0142' 进行编码:序号不在范围内 (128)

会不会是excel文件太大了?因为行数较少的 excel 文件一切正常。但是当我试图转换一个将近 2000 行的 excel 文件时,我得到了这个错误。

[更新]

这是代码:

filepath = './attachments'
wb = xlrd.open_workbook(os.path.join(filepath, 'result.xls'))
sheet = wb.sheet_by_index(0)
fp = open(os.path.join(filepath, 'result.csv'), 'wb')
wr = csv.writer(fp, quoting=csv.QUOTE_ALL)
for rownum in xrange(sheet.nrows):
  wr.writerow(sheet.row_values(rownum))
fp.close()

这是回溯:

Traceback (most recent call last):
  File "MethodTest.py", line 11, in <module>
    wr.writerow(sheet.row_values(rownum))
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0142' in position 2: ordinal not in range(128)

最佳答案

您正在读取包含 ASCII 范围之外数据的 Excel 工作表。

将 unicode 值写入 CSV 文件时,会进行自动编码,但对于超出 ASCII 字符范围的值会失败。显式编码:

for rownum in xrange(sheet.nrows):
      wr.writerow([unicode(val).encode('utf8') for val in sheet.row_values(rownum)])

在 Python 3 上,CSV 模块支持 Unicode 文本,前提是您为 open() 命令提供了合适的编码并以文本模式打开文件。虽然默认可以是UTF-8,但最好是明确的。文档建议您在打开文件进行 CSV 写入时使用 newline='':

fp = open(os.path.join(filepath, 'result.csv'), 'w', encoding='utf-8', newline='')
wr = csv.writer(fp, quoting=csv.QUOTE_ALL)
for rownum in range(sheet.nrows):
      wr.writerow(sheet.row_values(rownum))

您可能需要根据需要选择不同的编码。

将文件对象用作上下文管理器以确保它在代码退出后关闭(有或没有异常)也是一个好主意:

with open(os.path.join(filepath, 'result.csv'), 'w', encoding='utf-8', newline='') as fp:
    wr = csv.writer(fp, quoting=csv.QUOTE_ALL)
    for rownum in range(sheet.nrows):
          wr.writerow(sheet.row_values(rownum))

关于python xlrd 将 xlsx 转换为 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18113547/

相关文章:

python - 列出构建配置变量

python - 我如何知道在 HKEY_LOCAL_MACHINE 中创建注册表项的用户名

python - 根据键翻译numpy数组中的每个元素

python - 如何使用 xlrd 读取公式

python - 在python中使用xlrd读取

python - 使用 s3boto 的 Django 存储忽略 MEDIA_URL

python - VSCode/Python/Pep8 仅在保存文件时有效

python - 如何使用 xlrd 在 Python 中获取 excel 工作表名称

python - 有没有办法使用 Python 在 Excel 中执行类似 SQL 的 Select 语句?

python - 如何使用 `` xlrd.xldate_as_tuple( )``