利用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 相关文章推荐
bpython 功能强大的Python shell
Feb 16 Python
python对象及面向对象技术详解
Jul 19 Python
Python编程之string相关操作实例详解
Jul 22 Python
python实现图片彩色转化为素描
Jan 15 Python
python中如何使用分步式进程计算详解
Mar 22 Python
基于python实现高速视频传输程序
May 05 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
Apr 24 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 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
使用无限生命期Session的方法
2006/10/09 PHP
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
php字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
php fckeditor 调用的函数
2009/06/21 PHP
黑夜路人出的几道php笔试题
2009/08/04 PHP
PHP编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
分享一个超好用的php header下载函数
2014/01/31 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
Python实现队列的方法
2015/05/26 Python
Python2包含中文报错的解决方法
2018/07/09 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
python集合常见运算案例解析
2019/10/17 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
浅析python标准库中的glob
2020/03/13 Python
Python通过socketserver处理多个链接
2020/03/18 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
介绍一下linux文件系统分配策略
2013/02/25 面试题
4s店机修工岗位职责
2013/12/20 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js