`
monsterhuan
  • 浏览: 17932 次
文章分类
社区版块
存档分类
最新评论

Python中读取文件时报错UnicodeDecodeError

阅读更多
最近想学习数据挖掘,便入门python,在读取文件的时候遇到了UnicodeDecodeError。在此想将自己解决问题的思路再理一遍。
操作系统:win7
python版本:3.3.2
读取的文本文件:shediao.txt--------------这是文件1
代码:----------------这是代码A
f=open("D://shediao.txt")
print(f.read())

在cmd中运行cdtext.py的结果:

为了解决这个问题,首先了解一下Python的读写文件方法:
open()方法一般返回一个file文件对象
例子:
f=open(file,mode='r',encoding=None)

open()方法里的参数还有其他,一定要用户设定的只有文件路径。在这里我们讨论一下mode和encoding这两个参数。
第一个参数是string类型的文件地址,第二次参数代表文件被打开的模式。有以下几种模式:
‘r’:(read)文件只能被读(默认)
‘w’:(write)文件只能被写(如果写入一个已存在的文件中,原来的数据会被删除)
‘x’:创建新文件,如果文件原本存在则不创建
‘a’:(append)自动添加新内容到文件结尾
‘b’:(binary)二进制模式
‘t’:(text)文本模式(默认)
‘+’:读和写
‘U’:(universal newlines mode)通用换行模式
在windows系统中,text file和binary file是有区别的。对于JPEG和EXE格式文件,binary模式要谨慎使用。以binary模式打开文件,返回的是bytes对象;而以text模式打开文件,返回的是str对象。
默认模式是’r’,相当于’rt’。
在代码A中,选择了默认的模式,即’rt’模式。
在’t’模式下,当使用open()方法的时候,如果不设定参数encoding的值,该方法会默认encoding为系统默认的编码格式。p.s.获得系统默认的编码格式的方法如下:
import locale
print(locale.getpreferredencoding())

在我这个例子中,原文件的编码格式为ANSI,系统默认的编码格式为cp936,有些中文字符在两种编码格式下不统一,因此读文件时报错。
接下来,我利用记事本,把shediao.txt文件的编码格式改为utf-8,见图:



并且在open()方法中设定encoding为’utf-8’,代码如下:-------------这是代码B
f=open("D://shediao.utf-8.txt",encoding='utf-8')
print(f.read())

在shell中运算结果:

在python2.7.5中运行代码A是不会报错的,而且可以完整的把文本打印出来。
而且在python3.3.2中运行代码A,但改变读取的文件(文件还是使用ANSI编码格式的-------这是文件2),也可以把文本完整的打印出来。
更多的问题还有待研究。python2x和python3x对读取文件有什么不同?为什么文件2可以完整打印,而文件1不可以?(猜测:文件1中有特殊字符).........
参考资料:
python官网上关于读写文件的指导----->
http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files
python官网上关于编码格式------->
http://docs.python.org/3/library/codecs.html#module-codecs
text file 和binary file的区别--->
http://perfyy.blog.sohu.com/145845129.html
中文字符集编码---->
http://old.blog.edu.cn/user3/flyingcs/archives/2006/1418577.shtml

  • 大小: 23 KB
  • 大小: 23.2 KB
  • 大小: 100.6 KB
分享到:
评论

相关推荐

    python读取dbf文件时出现UnicodeDecodeError,目前解决方法(2021)(csdn)————程序.pdf

    python读取dbf文件时出现UnicodeDecodeError,目前解决方法(2021)(csdn)————程序

    python3的UnicodeDecodeError解决方法

    主要介绍了python3的UnicodeDecodeError解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Python实现序列化及csv文件读取

    这篇文章主要介绍了Python实现序列化及csv文件读取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、python 序列化: 序列化指的是将对象转化为”串行化”...

    解决python3读取Python2存储的pickle文件问题

    我在使用python3.5处理一个序列化文件xxx.pk,不过这个.pk文件是我在python2.7里面存储的,当我用python3读取的时候就会报如下的错误。 import pickle picklefile=open('2ohsumed_wmd_d.pk','rb') data=pickle.load...

    Python基于codecs模块实现文件读写案例解析

    codecs在读取文件时,发生错误: UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xbe in position 0: invalid start byte 中文切换编码:gbk,正常解决。 但有时,utf-8和gbk都不好使用,使用notepad++...

    pyquery报错:UnicodeDecodeError: ‘gbk’ codec can’t decode byte

    今天想使用pyquery库读取本地HTML文件时报错:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa1 in position 164: illegal multibyte sequence。 翻译一下就是UnicodeDecodeError: ‘gbk’编解码器无法...

    Python3 解决读取中文文件txt编码的问题

    于是就考虑是不是txt的编码问题,因为读取的txt文件是在Mac上面新建的纯文本文件,一时没找到在哪里查看编码,最后拷贝到Windows系统上,查看了txt文件的编码,竟然是ASCII,不是我最爱的utf-8,Mac你辜负了我对你的...

    Python运行报错UnicodeDecodeError的解决方法

    编辑Python27\Lib\mimetypes.py文件,全选,替换为以下patch后的正确脚本,或者直接依据此patch修改: """Guess the MIME type of a file. This module defines two useful functions: guess_type(url, s

    解决pyshp UnicodeDecodeError的问题

    用最新版本(2.1.0)的pyshp解析shp文件的records时: records = sf.records() 如果records里面含有中文字段,那么就会报错: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid ...

    basemap readshapefile UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 0-附件资源

    basemap readshapefile UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 0-附件资源

    在Python中关于中文编码问题的处理建议

    字符串是Python中最常用的数据类型,而且很多时候你会用到一些不属于标准ASCII字符集的字符,这时候代码就很可能抛出UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xc4 in position 10: ordinal not in ...

    彻底搞懂Python字符编码

    不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError、UnicodeDecodeError 错误,每当遇到错误我们就拿着 encode、decode 函数翻来覆去的转换,有时试着试着问题就解决了...

    彻彻底底地理解Python中的编码问题

    Python处理文本的功能非常强大,但是如果是初学者,没有搞清楚python中的编码机制,也经常会遇到乱码或者decode error。本文的目的是简明扼要地说明python的编码机制,并给出一些建议。 问题1:问题在哪里? 问题是...

    SQLite3中文编码 Python的实现

    读取十万多条文本写入SQLite类型数据库,由于文本中存在中文字符,插入到数据库没错,取出时一直是UnicodeDecodeError,导致折腾了一天。 最后的解决方法: Python连接数据时进行如下设置: db=sqlite3.connection...

    Python 编码处理-str与Unicode的区别

    用python处理中文时,读取文件或消息,http参数等等 一运行,发现乱码(字符串处理,读写文件,print) 然后,大多数人的做法是,调用encode/decode进行调试,并没有明确思考为何出现乱码 所以调试时最常出现的错误 ...

    PYTHON 自动化框架(数据驱动)

    注意:请勿用于商业目的,仅供学习参考!!!python自动化测试开发框架

    基于Python和条形图实现的世界杯数据可视化源码+详细项目说明+数据.tar

    # UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 18508-18509: invalid continuation byte # 这是由于数据中有一些非英语国家的语言,utf-8无法处理的编码导致的 matches = pd.read_csv('...

    python3使用GUI统计代码量

    本文实例为大家分享了python3使用GUI统计代码量的具体代码,供大家参考,具体内容如下 # coding=utf-8 ''' 选择一个路径 遍历路径下的每一个文件,统计代码量 字典存储 每一种类型文件的代码行数,eg: *.py -> ...

Global site tag (gtag.js) - Google Analytics