利用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编程中@property装饰器的用法
Jun 20 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
Python实现基于二叉树存储结构的堆排序算法示例
Dec 08 Python
python入门教程 python入门神图一张
Mar 05 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
Python Flask上下文管理机制实例解析
Mar 16 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
python TCP包注入方式
May 05 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 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
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
JavaScript数组迭代器实例分析
2015/06/09 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
JS用最简单的方法实现四舍五入
2019/08/27 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
python3 爬取图片的实例代码
2018/11/06 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
python关于倒排列的知识点总结
2020/10/13 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
大学生物业管理求职信
2013/10/24 职场文书
园林资料员岗位职责
2013/12/30 职场文书
秋季运动会表扬稿
2014/01/16 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis