python笔记5-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挥之不去的痛,这里先弄清楚乱码原因:

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

```

本文来自企鹅号 - 从零开始学自动化测试媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

3278
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

5898
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

8578
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4385
来自专栏魂祭心

原 canvas绘制clock

5074
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2916
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

5428
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.4K7
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

38410
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2767

扫码关注云+社区