python2.7 csv文件中文写入问题

一、前言

一般来说使用python的时候都使用csv模块去写入csv文件,但是写入中文的时候,经常会报:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

我试过直接用utf8编码打开文件,然后直接将要写入的字段拼接为逗号分隔的字符串,虽然能解决中文写入的问题,但是操作很麻烦,而且直接使用excel打开的时候,还是会显示乱码。

关于用excel直接打开编码utf8编码的csv文件,显示为乱码的问题,是因为excel打开csv文件的时候,会读取当前系统的默认编码,因为一般都是中文系统,所以默认使用gbk编码读取文件,导致显示为乱码。

因此解决的点归结为一句话:

如何使用csv库,将中文写入gbk编码的csv文件。

二、解决

之前用过csv是没法成功的,后面才查到需要用unicodecsv才行。

直接上例子:

import unicodecsv as ucsv
data = [[u"列1", u"列2"], [u"内容1", u"内容2"]]
with open('test.csv', 'wb') as f:
    w = ucsv.writer(f, encoding = 'gbk')
    w.writerows(data)

直接用文本编辑器打开效果:

微信截图_20181204140244

用excel直接打开效果:

微信截图_20181204140303

三、参考

1. Python: 在CSV文件中写入中文字符

(完)

猜你喜欢

转载自www.cnblogs.com/harrymore/p/10063775.html