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
相关产品推荐
相关产品推荐

