利用Python读取文件的四种不同方法比对


Posted in Python onMay 18, 2017

前言

大家都知道Python 读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果。下面就来看看详细的介绍吧。

场景

逐行读取一个 2.9G 的大文件

  • CPU i7 6820HQ
  • RAM 32G

方法

对每一行的读取进行一次分割字符串操作

以下方法都使用 with…as 方法打开文件。

with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

方法一 最通用的读文件方式

with open(file, 'r') as fh:
 for line in fh.readlines():
 line.split("|")

运行结果: 耗时 15.4346568584 秒

系统监视器中显示内存从 4.8G 一下子飙到了 8.4G, fh.readlines() 将读取的所有行数据存到内存,这种方法适合小文件。

方法二

with open(file, 'r') as fh:
 line = fh.readline()
 while line:
 line.split("|")

运行结果: 耗时 22.3531990051 秒

内存几乎没有变化,因为内存中只存取一行的数据,但是时间明显比上一次的长,对于进一步处理数据来说效率不高。

方法三

with open(file) as fh:
 for line in fh:
 line.split("|")

运行结果: 耗时 13.9956979752 秒

内存几乎没有变化,速度也比方法二快。

for line in fh 将文件对象 fh 视为可迭代的,它自动使用缓冲的 IO 和内存管理,因此您不必担心大文件。这是很 pythonic 的方式!

方法四 fileinput 模块

for line in fileinput.input(file):
 line.split("|")

运行结果: 耗时 26.1103110313 秒

内存增加了 200-300 MB,速度是以上最慢的。

总结

以上方法仅供参考,公认的大文件读取方法还是三最好。但是具体情况还是要根据机器的性能、处理数据的复杂度。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
结合Python的SimpleHTTPServer源码来解析socket通信
Jun 27 Python
Python使用wxPython实现计算器
Jan 30 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
Sanic框架请求与响应实例分析
Jul 16 Python
selenium python 实现基本自动化测试的示例代码
Feb 25 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
Python对ElasticSearch获取数据及操作
Apr 24 Python
python使用递归的方式建立二叉树
Jul 03 Python
pandas对dataFrame中某一个列的数据进行处理的方法
Jul 08 Python
python的flask框架难学吗
Jul 31 Python
pandas中对文本类型数据的处理小结
Nov 01 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 #Python
Python使用time模块实现指定时间触发器示例
May 18 #Python
Python实现的文本简单可逆加密算法示例
May 18 #Python
Python操作MongoDB详解及实例
May 18 #Python
Python 迭代器与生成器实例详解
May 18 #Python
Python字符串处理实例详解
May 18 #Python
Python进阶-函数默认参数(详解)
May 18 #Python
You might like
php简单浏览目录内容的实现代码
2013/06/07 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
vue项目中使用fetch的实现方法
2019/04/25 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
Python中音频处理库pydub的使用教程
2017/06/07 Python
python实现简单颜色识别程序
2020/02/19 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
python实现简单的五子棋游戏
2020/09/01 Python
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
初中作文评语大全
2014/04/23 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python