利用Python读取文件的四种不同方法比对

发布时间 - 2026-01-11 01:10:09    点击率:

前言

大家都知道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读取文件内容的三种常用方式及效率比较  # Python随机读取文件实现实例  # Python使用defaultdict读取文件各列的方法  # C++/Php/Python/Shell 程序按行读取文件或者控制台的实现  # Python实现读取文件最后n行的方法  # Python用list或dict字段模式读取文件的方法  # Python按行读取文件的实现方法【小文件和大文件读取】  # Python按行读取文件的简单实现方法  # Python3读取文件常用方法实例分析  # python使用fileinput模块实现逐行读取文件的方法  # python逐行读取文件内容的三种方法  # Python linecache.getline()读取文件中特定一行的脚本  # 分析Python读取文件时的路径问题  # 大文件  # 几乎没有  # 这是  # 会有  # 好了  # 大家都  # 适用于  # 不高  # 多种多样  # 这篇文章  # 就来  # 谢谢大家  # 具体情况  # 也比  # 您不  # 比上  # 过程中  # 自动关闭  # 仅供参考  # 增加了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网页设计与网站制作内容,怎样注册网站?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  Laravel怎么清理缓存_Laravel optimize clear命令详解  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  如何用好域名打造高点击率的自主建站?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Android自定义listview布局实现上拉加载下拉刷新功能  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何批量查询域名的建站时间记录?  怎么用AI帮你设计一套个性化的手机App图标?  微信小程序 HTTPS报错整理常见问题及解决方案  韩国服务器如何优化跨境访问实现高效连接?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  什么是javascript作用域_全局和局部作用域有什么区别?  如何在IIS7中新建站点?详细步骤解析  装修招标网站设计制作流程,装修招标流程?  如何在万网开始建站?分步指南解析  Linux系统命令中screen命令详解  微信小程序 scroll-view组件实现列表页实例代码  高防服务器租用指南:配置选择与快速部署攻略  如何在宝塔面板中创建新站点?  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  昵图网官方站入口 昵图网素材图库官网入口  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Laravel如何使用Vite进行前端资源打包?(配置示例)  js实现点击每个li节点,都弹出其文本值及修改  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel怎么使用Intervention Image库处理图片上传和缩放  详解vue.js组件化开发实践  如何在 React 中条件性地遍历数组并渲染元素  如何快速使用云服务器搭建个人网站?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Python自动化办公教程_ExcelWordPDF批量处理案例  如何在建站之星网店版论坛获取技术支持?  Linux系统命令中tree命令详解  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  如何在阿里云完成域名注册与建站?  深入理解Android中的xmlns:tools属性  Android使用GridView实现日历的简单功能  Laravel怎么使用artisan命令缓存配置和视图  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Android利用动画实现背景逐渐变暗