利用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中下划线的使用方法
Mar 27 Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
Sep 04 Python
pygame实现雷电游戏雏形开发
Nov 20 Python
Django框架模板的使用方法示例
May 25 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
使用keras实现Precise, Recall, F1-socre方式
Jun 15 Python
Python实现爬取并分析电商评论
Jun 19 Python
python Selenium 库的使用技巧
Oct 16 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
浅析Python中的套接字编程
Jun 22 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中Date获取时间不正确怎么办
2008/06/05 PHP
php学习笔记之 函数声明
2011/06/09 PHP
php银联网页支付实现方法
2015/03/04 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
python中的列表推导浅析
2014/04/26 Python
Python3实现生成随机密码的方法
2014/08/23 Python
Python装饰器的函数式编程详解
2015/02/27 Python
python比较2个xml内容的方法
2015/05/11 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
What is view? why do we have view?
2012/06/22 面试题
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
经理职责范文
2013/11/08 职场文书
主治医师岗位职责
2013/12/10 职场文书
中国梦的演讲稿
2014/01/08 职场文书
党校培训自我鉴定范文
2014/03/20 职场文书
预防煤气中毒方案
2014/06/16 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
典型事迹材料范文
2014/12/29 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
Python实现学生管理系统(面向对象版)
2021/06/24 Python
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL