博客
关于我
python笔记5-python2写csv文件中文乱码问题
阅读量:468 次
发布时间:2019-03-06

本文共 1625 字,大约阅读时间需要 5 分钟。

前言

python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode、decode。

当list、tuple、dict里面有中文时,打印出来的是Unicode编码,这个是无解的。
对中文编码纠结的建议尽快换python3吧,python2且用且珍惜!

csv中文乱码

1.open打开csv文件,用writer写入带有中文的数据时

  • writer写入单行
  • writers写入多行
# coding:utf-8import csvf = 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-8import csvf = 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-8import csv, codecsimport sysreload(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自动化交流 QQ群:779429633

---------------------------------python接口自动化已出书-------------------------

全书购买地址

转载地址:http://rbmbz.baihongyu.com/

你可能感兴趣的文章
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>
MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
查看>>
Mysql: 对换(替换)两条记录的同一个字段值
查看>>
mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
查看>>
MYSQL:基础——3N范式的表结构设计
查看>>
MYSQL:基础——触发器
查看>>
Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
查看>>