利用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中的默认参数详解
Jun 24 Python
python+Django+apache的配置方法详解
Jun 01 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
python爬虫使用cookie登录详解
Dec 27 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
python高阶爬虫实战分析
Jul 29 Python
python爬取网易云音乐评论
Nov 16 Python
Python_查看sqlite3表结构,查询语句的示例代码
Jul 17 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
python中spy++的使用超详细教程
Jan 29 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 Python
Python 可迭代对象 iterable的具体使用
Aug 07 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
关于Intype一些小问题的解决办法
2008/03/28 PHP
帝国cms常用标签汇总
2015/07/06 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
python2与python3共存问题的解决方法
2018/09/18 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
Django文件上传与下载(FileFlid)
2019/10/06 Python
python实现三壶谜题的示例详解
2020/11/02 Python
python空元组在all中返回结果详解
2020/12/15 Python
幼儿教师国培感言
2014/02/19 职场文书
秘书英文求职信
2014/04/16 职场文书
副总经理岗位职责
2015/02/02 职场文书
红色经典观后感
2015/06/18 职场文书
追悼词范文大全
2015/06/23 职场文书
2016年母亲节广告语
2016/01/28 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
使用numpy nonzero 找出非0元素
2021/05/14 Python