【linecache】
过往在读取文件的时候,我们通常使用的是这种模式:
with open('file.txt','r') as f: line = f.readline() while line: print line # 一些行级别的处理 line = f.readline()
这么做的好处在于通过一行一行读取内容,不会一下子把整个文件内容读到内存中去。
在长时间的实践中可以发现,这种读取文件的代码是一种相对比较固定的模式。既然是固定的模式,那么肯定就有轮子了。事实上python自带了一个linecache模块,这个模块可以方便地实现对行的读取,并且是按照上面的那种逐渐缓存式的读取。
■ 基本使用
linecache.getlines(filename) 指向一个文件,获取其所有行。返回的是一个列表,相当于是f.readlines()的返回,列表中每行内容也都是以 结尾的。
linecache.getlilne(filename,lineno) 指定一行返回。注意这个是LineNo而不是index,也就是说getline(filename,1)返回的是第一行而不是第二行。返回的行包含换行符,另外如果指定行不存在也不会报错而是返回空行。
linecache.updatecache(filename) 当文件内容发生改变时,如果需要获得到最新的文件内容,那么需要调用这个方法。如果不调用,仍然使用在缓存中的老文件内容。类似的操作还可以是linecache.clearcache之后再getlines也行。
linecache.clearcache() 清除当前的所有缓存
linecache.checkcache(filename) 检查缓存的有效性,如果文件已经不存在,或者内容被改变,那么老内容的缓存会被清除。在很多其他类似的场景中这个方法似乎应该是自动被调用的,但是在linecache中这个方法是需要手动调用的。从某种意义上来说,这个方法相当于是updatecache和clearcache的智能结合。