一 有什么做用,什么情況下使用
作用是從任何文件中讀取任意行蓄坏,使用緩存進(jìn)行了優(yōu)化,我的理解是如果你需要反復(fù)的使用一個(gè)文件進(jìn)行操作扎筒,優(yōu)先考慮這種方式把文件對象當(dāng)成緩存,
那么問題來了艰山,它和open()有什么區(qū)別呢,什么情況下用open,什么情況下用linecache呢
日常編程中如果涉及讀取大文件赦颇,一定要使用首選linecache模塊二鳄,相比open()那種方法要快N倍,它是你讀取文件的效率之源媒怯。
二 操作層面如何使用
linecache.getlines('file_name')
類似與readlines()
linecache.getline('file_name',10)
讀取第10行
linecache.clearcache()
清除緩存订讼。如果你不再需要先前從getline()中得到的行
1、使用linecache.checkcache(filename)來更新文件在硬盤上的緩存扇苞,然后在執(zhí)行l(wèi)inecache.getlines('a.txt')就可以獲取到a.txt的最新內(nèi)容欺殿;
2、直接使用linecache.updatecache('a.txt')鳖敷,即可獲取最新的a.txt的最新內(nèi)容
另:讀取文件之后你不需要使用文件的緩存時(shí)需要在最后清理一下緩存祈餐,使linecache.clearcache()清理緩存,釋放緩存哄陶。
三 原理層面
通過閱讀源碼可知
實(shí)際上底層調(diào)用了一次readlines()函數(shù)帆阳,然后按照行放進(jìn)了一個(gè)字典中,這個(gè)字典當(dāng)作緩存來使用
updatecache實(shí)際上調(diào)用的os.stat()來查看文件的最新信息
四 拓展
以前面試經(jīng)常會被問道python如何正確打開一個(gè)大文件,GB級別
那么我的首選是使用with open(a) as f:for each_line in f:XXX
f實(shí)際上是一個(gè)迭代器蜒谤,會自動采用緩沖IO和內(nèi)存管理山宾,所以媽媽在也不用擔(dān)心我打開大文件了
links:
http://wangwei007.blog.51cto.com/68019/1246214
https://hg.python.org/cpython/file/2.7/Lib/linecache.py