前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python如何处理大文件(知识整理)

Python如何处理大文件(知识整理)

作者头像
用户5745385
发布2019-07-04 11:46:28
1.4K0
发布2019-07-04 11:46:28
举报
文章被收录于专栏:XSYMambaXSYMamba

数据量非常大时,比如一份银行一个月的流水账单,可能有高达几千万的record。对于一般性能的计算机,有或者是读入到特殊的数据结构中,内存的存储可能就非常吃力了。考虑到我们使用数据的实际情况,并不需要将所有的数据提取出内存。当然读入数据库是件比较明智的做法。若不用数据库呢?可将大文件拆分成小块按块读入后,这样可减少内存的存储与计算资源

read()方法或read(100)

但是,当完成这一操作时,read() 会将整个文件加载到内存中。在文件较大时,往往会引发 MemoryError(内存溢出)。

那么,如何避免这个问题?




读每行readline()

这两种方法的运行结果是一样的,表面差别不大,但实际上有很大的区别: 第一种方法通过readlines方法,会首先一次性把文件载入到行字符串列表中,然后再对这个字符串列表进 行迭代; 而第二种方法运行的原理则有所不同,他并非一次性将全部的文件内容载入到内存中,而是在迭代的时 候,循环到了哪一行才将哪一行读入到内存。这里涉及到一个新的概念----迭代器(open函数返回的那个 就是文件迭代器),专栏里的文章会着重系统介绍,欢迎关注。 现在我们只需要知道,第二种方法是文本文件读取的最佳选择,它简单、且对任意大小的文件都有效,因 为他不会一次性把整个文件都载入到内存中,相反第一种方法存在内存压力过大的问题。

自动管理( with open() )

with 语句句柄负责打开和关闭文件(包括在内部块中引发异常时),for line in f 将文件对象 f 视为一个可迭代的数据类型,会自动使用 IO 缓存和内存管理,这样就不必担心大文件了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 XSYMamba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自动管理( with open() )
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档