标准库之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

你可能感兴趣的:(标准库之linecache)