任务
根据给出的行号,从文本文件中读取一行数据。
解决方案
Python标准库linecache模块非常适合这个任务:
import linecache
theline = linecache.getline(thefilepath, desired_line_number)
讨论
对这个任务而言,标准的 linecache 模块是 Python 能够提供的最佳解决工具。当你想要对文件中的某些行进行多次读取时,linecache特别有用,因为linecache 会缓存一些信息以避免重复一些工作。当你不需要从缓存中获得行数据时,可以调用模块的 clearcache函数来释放被用作缓存的内存。当磁盘上的文件发生了变化时,还可以调用checkcache,以确保缓存中存储的是最新的信息。
linecache 读取并缓存你指定名字的文件中的所有文本,所以,如果文件非常大,而你只需要其中–行,为此使用 linecache 则显得不是那么必要。如果这部分可能是你的程序的瓶颈,可以使用显式的循环,并将其封装在一个函数中,这样可以获得速度上的一些提升,像这样:
def getline(thefilepath,desired_line_number):
if desired_line_number < l:return''
for current_line_number,line in enumerate(open(thefilepath,'rU')):
if current_line_number == desired_line_number-l: return line
return ''
唯一需要注意的细节是enumerate从0开始计数,因此,既然我们假设desired_line_nummber 参数从1开始计算,需要在用==比较的时候减去1。