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

原文发布于微信公众号 - 从零开始学自动化测试(yoyoketang)

原文发表时间:2017-12-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nnngu

012 继承和聚合的区别

继承 指的是一个类继承另外的一个类的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extend...

38540
来自专栏企鹅号快讯

学习Python语言,这些酷毙的工具你知道几个?

工欲善其事必先利其器,一个好的工具能让起到事半功倍的效果,Python社区提供了足够多的优秀工具来帮助开发者更方便的实现某些想法,下面这几个工具给我的工作也带来...

25680
来自专栏编程

python笔记5-python2写csv文件中文乱码问题

前言 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode、decode。 当list、tuple、dict里面有中文时,打印出来的...

39250
来自专栏前端架构与工程

不仅仅是复制粘贴 - 聊聊前端脚手架

许多团队在制定前端工程方案时会加入脚手架模块。虽然不同的团队对工程化的理解和实施有所差异,但是对于脚手架的定位基本是一致的:创建项目初始文件。这是一条看起来十分...

22960
来自专栏CSDN技术头条

【问底】徐汉彬:PHP7和HHVM的性能之争

【导读】徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设。最近,PHP7...

25050
来自专栏全栈数据化营销

用python采集猫眼电影排行榜信息

随着大数据和人工智能多次被大佬提及之后,并且被定义为未来的大趋势后,天然适合于大数据和人工智能的编程语言python也异常火热,市面上出现了不少的高价格、大规模...

30070
来自专栏存储

集群NAS和对象存储的区别

这个话题乍一看可能有些奇怪,因为一个是集群NAS存储,一个是对象存储,没什么相同的地方,为啥还要比较? 而实际上,在考察两种技术的实际应用场景时,我们会发现,两...

488100
来自专栏应用案例

从MapleStory谈游戏状态同步

前言 单机版基本上做了很多功能了,现在开始进入了网络版,最近一直在做一个功能,玩家的状态同步,在做这个功能的时候遇到了一些坑,因此总结记录一下。 背景 在一个网...

38260
来自专栏mySoul

设计模式-行为型模式-命令模式

客户每次都要单独找一个,非常复杂,设置一个负责人,负责和客户和需求,美工之间的连接。

6920
来自专栏ThoughtWorks

Rec:一个项目的诞生|洞见

Rec是一个用来验证和转换数据文件的Java应用。从第一行代码到v1版本成形,仅仅经历了一个半月的时间,作为一个开源项目,在很多方面都有着各种各样的纠结。 ? ...

35040

扫码关注云+社区

领取腾讯云代金券