利用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 enumerate遍历数组示例应用
Sep 06 Python
python实现从字典中删除元素的方法
May 04 Python
python实现的文件同步服务器实例
Jun 02 Python
基于Python 的进程管理工具supervisor使用指南
Sep 18 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
python命令行工具Click快速掌握
Jul 04 Python
Django 响应数据response的返回源码详解
Aug 06 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
Python 串口通信的实现
Sep 29 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 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插入排序实现代码
2013/04/04 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
jquery ajax 登录验证实现代码
2009/09/23 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
跟老齐学Python之编写类之二方法
2014/10/11 Python
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
网络安全方面的面试题
2016/01/07 面试题
主管会计岗位责任制
2014/02/10 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
介绍信范文
2015/01/31 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL