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

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文件通常用于处理FOXPRO、dBASE等数据库格式。当尝试使用Python读取DBF文件时,可能会遇到`UnicodeDecodeError`,这是因为DBF文件中的字符编码与Python默认的解码方式不匹配。以下是针对这个问题的...

    python3的UnicodeDecodeError解决方法

    在Python 3中,UnicodeDecodeError通常出现在尝试将字节串解码为字符串时,如果字节串包含无法映射到指定编码的字符,就会抛出这个错误。这个错误是由于Python试图将非UTF-8编码的数据解码为UTF-8格式导致的。在处理...

    python读取txt文件并取其某一列数据的示例

    ### Python读取TXT文件并提取特定列数据的知识点解析 #### 一、Python文本文件处理基础知识 1. **文件操作的基本方法**: - `open()`:用于打开一个文件,可以指定不同的模式如只读(`'r'`)、写入(`'w'`)等。 - `...

    python文件读取失败怎么处理

    本文将深入探讨Python中文件读取可能出现的错误及其相应的解决策略。 首先,最常见的错误是编码错误,例如在尝试读取非UTF-8编码的文件时。Python默认使用UTF-8编码读取文件,如果文件采用其他编码,就会引发`...

    用python3读取python2的pickle数据方式

    本文将详细介绍如何解决这些问题,以便在Python 3环境中顺利读取Python 2的pickle文件。 **问题一:TypeError: a bytes-like object is required, not 'str'** 这个错误是因为Python 3在处理字节和字符串时有了更...

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

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

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

    在Python中,pickle模块用于对象序列化和反序列化。对象序列化是指把内存中的对象状态保存到磁盘文件中,之后可以从文件中恢复对象状态的过程,也称为对象的保存和加载。 pickle模块从Python 2开始就存在,而Python...

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

    当尝试使用Python读取含有中文字符的TXT文件时,可能会遇到“UnicodeDecodeError: ‘utf-8' codec can't decode byte…”的错误。这通常意味着Python试图以UTF-8编码解析一个实际上使用其他编码(如ASCII)的文件,...

    python 实现读取csv数据,分类求和 再写进 csv

    本文将详细介绍如何使用Python读取CSV文件中的数据,根据特定列进行分类汇总,并将结果保存到新的CSV文件中。 #### 二、准备工作 在开始编写代码之前,确保安装了必要的Python库。本文主要使用`pandas`库来处理CSV...

    解决Python中pandas读取*.csv文件出现编码问题

    ### 解决Python中pandas读取*.csv文件出现编码问题 #### 一、问题背景与现象 在使用Python中的pandas库处理CSV文件时,可能会遇到由文件编码格式不匹配导致的问题。例如,在读取非UTF-8编码的CSV文件时,可能会...

    读取csv文件显示中文

    在Python编程环境中,读取CSV文件是常见的数据处理任务,特别是在数据分析、数据挖掘等领域。CSV(Comma Separated Values)是一种通用的、轻量级的数据存储格式,它使用逗号分隔值来组织数据。然而,当CSV文件包含...

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

    总之,`codecs`模块是Python中处理文本编码问题的核心工具,通过灵活地设定编码方式和错误处理策略,我们可以有效地读取和写入各种编码格式的文件。了解和掌握`codecs`模块的使用方法,对于编写健壮的文件处理代码至...

    python学习笔记-文件与异常

    首先,让我们深入了解Python中的文件操作。Python提供了简洁的API来读取、写入和处理各种类型的文件。基本的文件操作包括打开(open()函数)、读取(read()、readline()、readlines())、写入(write())和关闭...

    Python read函数按字节(字符)读取文件的实现

    本文主要探讨如何使用Python中的 `read()` 函数按字节或字符读取文件内容,并通过具体的示例代码来进行说明。 #### 基础知识 `read()` 是一个内置的文件对象方法,它可以从文件中读取指定数量的数据。如果未指定...

    python编码汇总

    如果不指定编码,Python 会尝试根据文件的字节顺序标记(BOM)来确定,若没有 BOM,则可能引发 UnicodeDecodeError。 "python字符编码.doc" 可能涵盖了字符串的编码和解码操作。Python 中的 `str.encode()` 方法...

    实验8-Python实验报告.docx

    在这个实验中,我们主要关注的是Python中与文件操作相关的知识点,包括读取、写入、修改和处理不同格式的文件,如文本文件、CSV文件等。 1. **文件操作基础**:Python提供了丰富的文件操作接口,包括`open()`函数...

    python:输出中文的开头编码

    Python中输出中文到控制台时,大多数现代终端和IDE都支持UTF-8编码,所以只要文件开头正确声明了编码,就可以直接输出中文字符而不会出现乱码。不过,当Python代码需要输出中文到文件或进行网络通信时,则需要确保...

    Day 4 用Python处理文件.pdf

    在深入探讨之前,我们首先需要了解Python中的字符编码机制。Python 支持多种字符编码,如 UTF-8、GBK 等。不同的操作系统默认采用的编码格式也不同: - **Windows** 默认采用 **GBK** 编码。 - **Mac** 和 **Linux*...

    解决python 读取 log日志的编码问题

    总的来说,处理Python中编码问题的关键在于正确识别文件编码,并使用相应的解码器。同时,合理利用Python提供的各种工具,如`logging`模块、正则表达式和数据处理库,可以有效地进行日志分析和管理。

Global site tag (gtag.js) - Google Analytics