==========

本文记录使用Python在读取文件时的一些心得体会。

不能decode bytes

使用open方法读取文件时,经常会遇到这样的问题:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 205: illegal multibyte sequence

open方法原型如下:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

如果encoding未指定,会使用平台默认的编码方式,该方式可通过

import locale

locale.getpreferredencoding(False)

来获得。本人的Windows为cp936,Linux为ANSI_X3.4-1968和UTF-8。

上述问题出现的原因,是因为文件全部或者部分内容的编码方式与读取的编码方式不一致。

注意:以二进制方式读写文件时,encoding参数会被忽略。

解决方案:

方案一:修改数据源的编码方式,使其以期望的格式保存,再以期望的格式打开即可。修改原始编码方式可能会造成文件乱码,慎重使用。

方案二:对于含有中文内容的文件来说,可以用包含更大容量字符数的编码方式来打开。GB2312 < GBK < GB18030

方案二:使用 errors 参数来忽略错误行,有不同的忽略级别:

ignore:忽略由非法字符触发的编码错误

strict:默认属性,遇到编码错误时,对外抛出 ValueError 异常

replace:使用"?"来替换非法字符

pandas的 read_csv

使用pandas,从csv格式文件中读取数据,可使用 read_csv 函数,该函数有很多有用的参数,现把常用的列举如下:

nrows: 读取设定的行数,eg:nrows = 10,只读取前10行

usecols:只读取指定列。eg:usecols=["name", "age"],只读取"name"和"age"列,在读取大文件时很有用。

keep_default_na:当为空时,是否使用Nan值来代替。设置False时,表示保留原样。

分块读取相关:iterator、chunksize。

encoding:指定字符集类型

error_bad_line:当遇到异常行记录时,比如某行逗号较其他行多,导致数据列不匹配,这会触发异常,不会有DataFrame返回。可设置为False,忽略掉这些错误行。如果想知道在解析过程中,这些错误行在那里,可再设置 warn_bad_lines 为True,那么会输出解析错误行的相关信息。

Python中的编码

编码历史发展,从最开始的ASCII编码(单字节编码),到兼容ANSI和常用中文的GB2312编码(双字节编码)、GBK(对GB2313的扩展),在扩展编码中,将ASCII中原有的数字、标点和字符等统统重新编码为两字节长,这就是“全角”字符。原来在ASCII范围内的称为“半角”字符,

但这样针对每种文化各自指定一套,不利于全球交流,于是ISO国际组织针对全球现有的文化、字母和符号,指定统一编码,称为Unicode编码方式(2个字节),它只规定各种字符的二进制定义,但具体使用多少个字节来保存,没有做规定,于是出现各种Unicode传输编码,例如:UTF-8,变长编码方式,使用1~4个字节表示一个符号,根据不同符号长度而变化字节长度。ASCII字符使用一个字节,中文使用三个字节。

UTF-16,统一使用2个字节来传输。

unicode是二进制编码方式,是所有编码之间转换的中介。例如utf-8和gbk之间需要通过unicode编码进行中转,才能相互转换。python提供了encode和decode两个函数来进行编码转换。

Python源文件头的编码说明:#coding:utf-8 #表示Python解释器用什么样的编码去读取该文件,在该文件中,声明 str = u"中国"表示str指向由utf8编码的字节流。

str(),将各种类型转换为str。如果输入是已编码的字符串,则不做改变。如果是未编码的unicode字符串,则会编码再输出。

python无法读取文件-Python读取文件相关推荐

  1. python读取文件r_python read文件的r和rb的区别

    r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要向文件写入数据,并截断以前的内容 'a':表示要向文件 ...

  2. Python fileinput模块:逐行读取多个文件

    前面章节中,我们学会了使用 open() 和 read()(或者 readline().readlines() )组合,来读取单个文件中的数据.但在某些场景中,可能需要读取多个文件的数据,这种情况下, ...

  3. 如何用matlab读取npz文件,Python Numpy中数据的常用的保存与读取方法

    在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件 ...

  4. python读取大文件目录_Python读取系统文件夹内所有文件并统计数量的方法

    大家先看一下Python os模块中的部分函数 python 路径相关的函数 os.listdir(dirname):列出dirname下的目录和文件 os.getcwd():获得当前工作目录 os. ...

  5. Python读取多个excel文件(删除字段、数据格式转换、dataframe多表合并)并写入ElasticSearch实战(自动创建索引、写入ElasticSearch、探索性数据分析)

    Python读取多个excel文件(删除字段.数据格式转换.dataframe多表合并)并写入ElasticSearch实战(自动创建索引.写入ElasticSearch.探索性数据分析) 目录

  6. python代码读取文件并将文件反序存入另外一个文件

    python代码读取文件并将文件反序存入另外一个文件 #data[::-1] 实现了反转(reverse) #python代码读取文件并将文件反序存入另外一个文件 # Open the file in ...

  7. python中如何在写文件之前删除文件内容_Python:文件的读取、创建、追加、删除、清空...

    一.用Python创建一个新文件,内容是从0到9的整数, 每个数字占一行: #python >>>f=open('f.txt','w') # r只读,w可写,a追加 >> ...

  8. 在Python中读取MATLAB的数据文件

    简 介: 本文测试了几种通过python直接读取MATLAB的**.MAT格式的数据文件,有些方法经过测试发现无法完成.而通过mat4py可以比较方便的读取MATLAB中的数据文件.利用手边已有的用于 ...

  9. python用os.system打开wav文件_使用python读取wav格式文件

    ** 使用python读取wav格式文件 ** - 基本概念 [采样频率] 即取样频率, 指每秒钟取得声音样本的次数.采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多.由 ...

  10. python 删除文件-python 删除文件和读取文件

    import os os.walk(path) path是指想要遍历的文件夹的路径 这个函数得到的结果是一个或多个tuple,个数取决于路径下是否有文件夹:如果没有文件夹的话,那么只有一个tuple, ...

最新文章

  1. python装饰器教学_Python装饰器学习(九步入门)
  2. 微服务并不能解决你的烂代码问题
  3. pandas数据转换时遇到不能转换的数据转为NaN的参数设置errors='coerce'
  4. java二位数组biaoda_1 面向对象前部分
  5. 通过源码分析MyBatis的缓存
  6. Cert manager自动签发/更新证书
  7. Canvas createImageData
  8. Java Hashtable equals()方法与示例
  9. pandas无法打开.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported
  10. MySql类似Oracle的dual虚拟表
  11. android设计模式之--观察者模式
  12. 无锁队列详细分解 — 顶层设计
  13. 【纸牌识别】基于matlab灰度二值化纸牌识别【含Matlab源码 464期】
  14. Linux操作系统[下载安装][命令][工具使用]
  15. MATLAB 基础教程:编程习惯
  16. 创新检查技术,赋能保密监管 ,您需要一款这样的数据库内容保密检查系统!
  17. mapabc高德地图区域收缩事件监听
  18. matlab的from模块_Matlab中SIMULINK的模块库以及比较常用的模块
  19. 网页打印问题-页面显示不全
  20. 【终于可以好好利用自己的技能和知识来享受生活了】

热门文章

  1. webdriver--单选、复选及下拉框的定位
  2. string.Format 方法拼入{}
  3. 软件工程小组问世第六章之概要设计青铜篇
  4. day07 数据类型的内置方法(列表的内置方法)
  5. instanceof 的作用
  6. fuel6.0安装部署
  7. 关于大型网站技术演进的思考(一)--存储的瓶颈(上)
  8. MySQL Server-id踩到的坑
  9. ComboBox的数据联动
  10. 周报 2016.04.10