今天分享一个python的小模块: linecache
, 能够用它方便地获取某一文件某一行的内容。并且它也被 traceback
模块用来获取相关源码信息来展现。
用法很简单:html
>>> import linecache >>> linecache.getline('/etc/passwd', 4) 'sys:x:3:3:sys:/dev:/bin/sh\n'
linecache.getline
第一参数是文件名,第二个参数是行编号。若是文件名不能直接找到的话,会从 sys.path
里找。node
若是请求的行数超过文件行数,函数不会报错,而是返回''空字符串。
若是文件不存在,函数也不会报错,也返回''空字符串。python
linecache
会尝试用缓存一些信息来优化对文件的读取。它还提供了两个方法来处理缓存相关。windows
linecache.clearcache() # 清除再也不须要的linecache.getcache()获取的内容 linecache.checkcache([filename]) # 检查文件在硬盘上是否有更新,若是有更新缓存。 # 若是没有提供文件名参数,则检查linecache缓存里全部的条目
当文件很大而只要读取其中一行时,若是采用linecache成为程序的瓶颈,也能够采用以下方法来得到速度上一些提高:缓存
def get_line(thefilepath, desired_line_number): if desired_line_number < 1: return '' for current_line_number, line in enumerate(open(thefilepath, 'rU')): if current_line_number == desired_line_number -1: return line return ''
ps: 打开文件的方式'rU'是以一种windows,mac,unix三个平台同一的方式打开,都读取成 n
, 参照这里。函数
《Python Cookbook》Chapter2.4unix