解决Python2.7读写文件中的中文乱码问题


Posted in Python onApril 12, 2018

Python2.7对于中文编码的问题处理的并不好,这几天在爬数据的时候经常会遇到中文的编码问题。但是本人对编码原理不了解,也没时间深究其中的原理。在此仅从应用的角度做一下总结,

1.设置默认编码

在Python代码中的任何地方出现中文,编译时都会报错,这时可以在代码的首行添加相应说明,明确utf-8编码格式,可以解决一般情况下的中文报错。当然,编程中遇到具体问题还需具体分析啦。

#encoding:utf-8
或者
# -*- coding: utf-8 -*- 
import sys 
reload(sys) 
sys.setdefaultencoding('utf8') # 设置默认编码格式为'utf-8'

2.文件读写

文件读写中遇到中文,通常不会报错,但是最后运行结果显示乱码,给后续处理带来不便。

2.1 读文件

读文件时,如果文件路径、文件名中有中文,需要使用unicode函数将其编码为'utf-8'格式,然后再进行正常的文件读取。以我常用的pandas的read_csv函数为例,使用如下代码可以成功地读取名为“POI总表”的csv文件,保存在DataFrame数据类型的poi_list。

import pandas as pd
inpath = 'C:\\POI总表.csv'
**path = unicode(inpath, 'utf-8')**
poi_list = pd.read_csv(path)

2.2 写文件

文件名有中文,文件名乱码

当想要将程序运行结果保存到文本文件时,文本文件的命名中如果有中文,不做处理文件名会出现乱码。利用unicode函数进行编码可解。unicode(‘中文.csv','utf-8')

文件内容有中文,excel打开内容乱码

如果将包含中文的结果输出到csv文件,一般默认使用Excel打开文件时,文件内容会出现乱码,而使用文本编辑器打开不会乱码。这是因为Excel默认的编码方式为‘GBK‘,而文本编辑器默认的格式为‘utf-8'。使用codecs包在创建文件后添加语句f.write(codecs.BOM_UTF8)可解

name='语文'
f = open(name+'.csv','w')
f.write('123,语文')
f.close()
#修改编码
import codecs
f = open(**unicode(name+'.csv','utf-8')**,'w') # 文件名不乱码
**f.write(codecs.BOM_UTF8) # excel打开内容不乱码的核心语句**
f.write('123,语文')
f.close()

输出结果:

#文件名:璇???.csv
#Excel打开  123 璇???
#文本编辑器打开 123,语文
#改编码后
#文件名:语文.csv
#Excel打开  123 语文
#文本编辑器打开 123,语文

以上这篇解决Python2.7读写文件中的中文乱码问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现360皮肤按钮控件示例
Feb 21 Python
Python二分法搜索算法实例分析
May 11 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
基于Python __dict__与dir()的区别详解
Oct 30 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
详解用python写网络爬虫-爬取新浪微博评论
May 10 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
pycharm 的Structure界面设置操作
Feb 05 Python
python+opencv实现目标跟踪过程
Jun 21 Python
python 实现对文件夹内的文件排序编号
Apr 12 #Python
pandas数值计算与排序方法
Apr 12 #Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 #Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 #Python
Python实现简单http服务器
Apr 12 #Python
Python实现一个服务器监听多个客户端请求
Apr 12 #Python
python使用socket创建tcp服务器和客户端
Apr 12 #Python
You might like
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
PHP连接access数据库
2015/03/27 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
php微信开发之关注事件
2018/06/14 PHP
javascript下数值型比较难点说明
2010/06/07 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
python提取字典key列表的方法
2015/07/11 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
详解python变量与数据类型
2020/08/25 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
介绍一下Mysql的存储引擎
2015/02/12 面试题
室内设计专业个人的自我评价
2013/10/19 职场文书
入党思想汇报
2014/01/05 职场文书
大学辅导员事迹材料
2014/02/05 职场文书
效能风暴心得体会
2014/09/04 职场文书
高三毕业评语
2014/12/31 职场文书
Web应用开发TypeScript使用详解
2022/05/25 Javascript
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android