你想根据给出的行号,从文本文件中读取一行数据。
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 < 1: return ''
- for current_line_number, line in
enumerate(open(thefilepath, 'rU')):- if current_line_number ==
desired_line_number-1: return line- return ''
唯一需要注意的细节是enumerate从0开始计数,因此,既然我们假设desired_line_ number参数从1开始计算,需要在用==比较的时候减去1。