共计 1814 个字符,预计需要花费 5 分钟才能阅读完成。
导读 | python2 最大的坑在于中文编码问题,遇到中文报错首先加 u,再各种 encode、decode,这篇文章给大家介绍 Python2 写 csv 文件中文乱码问题及解决方法,感兴趣的朋友跟随小编一起看看吧 |
前言
python2 最大的坑在于中文编码问题,遇到中文报错首先加 u,再各种 encode、decode。当 list、tuple、dict 里面有中文时,打印出来的是 Unicode 编码,这个是无解的。对中文编码纠结的建议尽快换 python3 吧,python2 且用且珍惜!
csv 中文乱码
1.open 打开 csv 文件,用 writer 写入带有中文的数据时
writer 写入单行 writers 写入多行
# coding:utf-8
import csv
f = open("xieru.csv", 'wb')
writer = csv.writer(f)
# 需要写入的信息
data = ["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"]
writer.writerow(data) # 写入单行
# writer.writerows(datas) # 写入多行
f.close()
2. 打开 csv 文件,发现写入的中文乱码了
编码与解码
1. 中文乱码问题一直是 python2 挥之不去的痛,这里先弄清楚乱码原因:
所以就导致了乱码问题
2. 先把 python 里面的中文字符串 decode 成 utf-8,再 encode 为 gbk 编码
data.decode('utf-8').encode('gbk')
3. 如果是读取 csv 文件的话,就反过来:
data.decode('gbk').encode('utf-8')
解决方案
1. 方案一:对字符串转换编码 (这个太麻烦了,不推荐)
# coding:utf-8
import csv
f = open("xieru1.csv", 'wb')
writer = csv.writer(f)
# 需要写入的信息
data = ["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"]
a = []
for i in data:
a.append(i.decode("utf-8").encode("gbk"))
writer.writerow(a) # 写入单行
# writer.writerows(datas) # 写入多行
f.close()
2. 方法二:用 codecs 提供的 open 方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部 unicode (推荐)
# coding:utf-8
import csv, codecs
import sys
reload(sys)
sys.setdefaultencoding('utf8')
f = codecs.open("xx.csv", 'wb', "gbk")
writer = csv.writer(f)
writer.writerow(["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"])
# 多组数据存放 list 列表里面
datas = [["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"],
["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"],
["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"],
]
writer.writerows(datas)
f.close()
python 写入 csv 文件时的乱码问题
今天在使用 python 的 csv 库将数据写入 csv 文件时候,出现了中文乱码问题,解决方法是在写入文件前,先指定 utf- 8 编码,如下:
import csv
import codecs
if __name__ == "__main__":
file_name = "data.csv"
with open(file_name, "wb") as f:
f.write(codecs.BOM_UTF8)
csv_write = csv.writer(f)
csv_write.writerows([["姓名", "年龄"], ["张三", 18]])
得到 csv 文件,正确的显示了中文。
正文完
星哥玩云-微信公众号