python打开csv文件乱码_Python在向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文件,发现写入的中文乱码了

1070438-20171208134433249-2088371938.png

编码与解码

1.中文乱码问题一直是python2挥之不去的痛,这里先弄清楚乱码原因:

python2本身内部代码的编码有str和unicode两种编码

然而文件写入到windows系统时候,windows上的是gb2312编码

所以就导致了乱码问题

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()

从悠悠处搬过来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值