利用Python读取文件的四种不同方法比对
前言
大家都知道Python读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果。下面就来看看详细的介绍吧。
场景
逐行读取一个2.9G的大文件
- CPUi76820HQ
- RAM32G
方法
对每一行的读取进行一次分割字符串操作
以下方法都使用with…as方法打开文件。
with语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。
方法一最通用的读文件方式
withopen(file,'r')asfh: forlineinfh.readlines(): line.split("|")
运行结果:耗时15.4346568584秒
系统监视器中显示内存从4.8G一下子飙到了8.4G,fh.readlines()将读取的所有行数据存到内存,这种方法适合小文件。
方法二
withopen(file,'r')asfh: line=fh.readline() whileline: line.split("|")
运行结果:耗时22.3531990051秒
内存几乎没有变化,因为内存中只存取一行的数据,但是时间明显比上一次的长,对于进一步处理数据来说效率不高。
方法三
withopen(file)asfh: forlineinfh: line.split("|")
运行结果:耗时13.9956979752秒
内存几乎没有变化,速度也比方法二快。
forlineinfh将文件对象fh视为可迭代的,它自动使用缓冲的IO和内存管理,因此您不必担心大文件。这是很pythonic的方式!
方法四fileinput模块
forlineinfileinput.input(file): line.split("|")
运行结果:耗时26.1103110313秒
内存增加了200-300MB,速度是以上最慢的。
总结
以上方法仅供参考,公认的大文件读取方法还是三最好。但是具体情况还是要根据机器的性能、处理数据的复杂度。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。