利用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 相关文章推荐
windows下wxPython开发环境安装与配置方法
Jun 28 Python
python实现在每个独立进程中运行一个函数的方法
Apr 23 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
python datetime中strptime用法详解
Aug 29 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
Django 再谈一谈json序列化
Mar 16 Python
500行python代码实现飞机大战
Apr 24 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
Python依赖包迁移到断网环境操作
Jul 13 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 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数组操作――获取数组最后一个值的方法
2015/04/14 PHP
用jquery来定位
2007/02/20 Javascript
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
前台js调用后台方法示例
2013/12/02 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
开源Web应用框架Django图文教程
2017/03/09 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
Python引用计数操作示例
2018/08/23 Python
24式加速你的Python(小结)
2019/06/13 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
房地产广告词大全
2014/03/19 职场文书
党支部换届选举方案
2014/05/08 职场文书
2014年征兵标语
2014/06/20 职场文书
运动会演讲稿50字
2014/08/25 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
正规欠条模板
2015/07/03 职场文书
跳高加油稿
2015/07/21 职场文书