利用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 06 Python
python pandas 对series和dataframe的重置索引reindex方法
Jun 07 Python
基于python log取对数详解
Jun 08 Python
Python中GIL的使用详解
Oct 03 Python
Python除法之传统除法、Floor除法及真除法实例详解
May 23 Python
Python学习笔记之变量、自定义函数用法示例
May 28 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
wxPython实现画图板
Aug 27 Python
python字符串的index和find的区别详解
Jun 20 Python
Python第三方包PrettyTable安装及用法解析
Jul 08 Python
Python pip 常用命令汇总
Oct 19 Python
详解Python 3.10 中的新功能和变化
Apr 28 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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
Prototype使用指南之ajax
2007/01/10 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
Python性能优化的20条建议
2014/10/25 Python
python通过smpt发送邮件的方法
2015/04/30 Python
Python处理字符串之isspace()方法的使用
2015/05/19 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
PyQt5实现简易电子词典
2019/06/25 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
python pycharm的安装及其使用
2019/10/11 Python
python3实现单目标粒子群算法
2019/11/14 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
总经理秘书的岗位职责
2013/12/27 职场文书
教学实验楼管理制度
2014/02/01 职场文书
供应链金融服务方案
2014/05/25 职场文书
欢度春节标语
2014/07/01 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
详解MySQL集群搭建
2021/05/26 MySQL