利用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 相关文章推荐
python处理文本文件实现生成指定格式文件的方法
Jul 31 Python
Python3.2中Print函数用法实例详解
May 19 Python
Python输出带颜色的字符串实例
Oct 10 Python
详解Python使用tensorflow入门指南
Feb 09 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
实时获取Python的print输出流方法
Jan 07 Python
Python设计模式之模板方法模式实例详解
Jan 17 Python
Django后台admin的使用详解
Jul 08 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
Python迭代器协议及for循环工作机制详解
Jul 14 Python
python识别验证码的思路及解决方案
Sep 13 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 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中防止伪造跨站请求的小招式
2011/09/02 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
分享一个asp.net pager分页控件
2012/01/04 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
Python入门篇之正则表达式
2014/10/20 Python
浅谈Python中数据解析
2015/05/05 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
python多进程重复加载的解决方式
2019/12/13 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
Reformation官网:美国女装品牌
2018/09/14 全球购物
啦啦队口号大全
2014/06/16 职场文书
图书馆标语
2014/06/19 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
长城导游词300字
2015/01/30 职场文书
英文导游词
2015/02/13 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
介绍信怎么写
2015/05/05 职场文书
宣传委员竞选稿
2015/11/19 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫