标准库之linecache

一 有什么做用,什么情况下使用
作用是从任何文件中读取任意行,使用缓存进行了优化,我的理解是如果你需要反复的使用一个文件进行操作,优先考虑这种方式把文件对象当成缓存,

那么问题来了,它和open()有什么区别呢,什么情况下用open,什么情况下用linecache呢
日常编程中如果涉及读取大文件,一定要使用首选linecache模块,相比open()那种方法要快N倍,它是你读取文件的效率之源。

二 操作层面如何使用
linecache.getlines('file_name')
类似与readlines()
linecache.getline('file_name',10)
读取第10行
linecache.clearcache()
清除缓存。如果你不再需要先前从getline()中得到的行
1、使用linecache.checkcache(filename)来更新文件在硬盘上的缓存,然后在执行linecache.getlines('a.txt')就可以获取到a.txt的最新内容;
2、直接使用linecache.updatecache('a.txt'),即可获取最新的a.txt的最新内容

另:读取文件之后你不需要使用文件的缓存时需要在最后清理一下缓存,使linecache.clearcache()清理缓存,释放缓存。
三 原理层面
通过阅读源码可知
实际上底层调用了一次readlines()函数,然后按照行放进了一个字典中,这个字典当作缓存来使用
updatecache实际上调用的os.stat()来查看文件的最新信息

四 拓展
以前面试经常会被问道python如何正确打开一个大文件,GB级别
那么我的首选是使用with open(a) as f:for each_line in f:XXX
f实际上是一个迭代器,会自动采用缓冲IO和内存管理,所以妈妈在也不用担心我打开大文件了

links:
http://wangwei007.blog.51cto.com/68019/1246214
https://hg.python.org/cpython/file/2.7/Lib/linecache.py

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,777评论 19 139
  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 8,491评论 2 25
  • 一年后…… “今天晚上有事吗?晚上出去玩吧”寝室的那个较男孩子性格的秦琳问着我们寝室的两个女生段薇和曹欣,那个时候...
    伊爱儿阅读 3,101评论 0 0
  • 喵花阅读 728评论 0 0
  • html5shiv是实现了让低版本的浏览器支持h5 respond实现了响应式布局,理想状态是,对PC/移动各种终...
    SmallTwo阅读 4,793评论 0 0