You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python2.7使用openpyxl转换Excel为CSV时u2013字符报错求助

解决Python2.7中Excel转CSV的Unicode字符报错问题

嘿,我明白你在Python2.7里处理Excel转CSV时遇到的Unicode字符问题了——特别是那个U+2013短破折号,确实容易在老版本Python里踩坑!不同于Perl里直接通过open指定Unicode模式,Python2.7的默认文件操作是字节流模式,处理这类特殊字符时需要额外处理编码。

下面是针对你的脚本的修改方案,帮你搞定这个问题:

核心思路

Python2.7的内置open()函数不支持直接指定编码,所以我们需要用codecs或者io模块来以编码模式打开文件,确保从Excel读取的Unicode字符能正确编码写入CSV。

修改后的完整脚本

#!/home/casper/python/core/2.7.14/exec/bin/python2.7
# -*- coding: utf-8 -*-
import openpyxl
import csv
import codecs

# 加载Excel文件
wb = openpyxl.load_workbook('RiskLimitSnapshot.xlsx')
sh = wb.get_active_sheet()

# 用codecs以UTF-8编码打开CSV文件
with codecs.open('goodRiskLimitSnapshot.csv', 'w', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    # 遍历Excel的每一行
    for row in sh.iter_rows(values_only=True):
        # 将每行的单元格内容转为Unicode,处理空值避免报错
        unicode_row = [unicode(cell) if cell is not None else u'' for cell in row]
        # 写入CSV
        writer.writerow(unicode_row)

关键说明

  • 编码处理:用codecs.open()指定encoding='utf-8',这样写入时会自动把Unicode字符串编码为UTF-8字节,完美支持U+2013这类特殊字符。
  • Unicode转换:Excel单元格的值可能是数字、日期或None,我们统一转为Unicode类型,避免写入时出现类型错误。
  • 替代方案:如果你更习惯Python3风格的文件操作,也可以用io.open(),用法和codecs.open()类似,只需要把导入的模块换成import io,然后用io.open('goodRiskLimitSnapshot.csv', 'w', encoding='utf-8', newline='')打开文件(newline=''可以避免CSV出现多余的空行)。

这样修改后,你的脚本就能顺利处理包含短破折号的Excel内容,不会再出现编码报错啦!

内容的提问来源于stack exchange,提问作者capser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:23:21