从循环中的文件中读取特定行(优化)

时间:2012-05-03 21:10:39

标签: python

我正在从文本文件中读取特定行。这是我的代码:

file.seek(0)
for j, ln in enumerate(file):
   if j == line_number
      line = ln   # i'm getting the line
      break

我在“循环”中使用此代码时需要很长时间,其中line_number每回合都是随机的。 我也尝试过linecache.getline(),但每次都需要调用linecache.clearcache(),所以不是更好。

有更快的解决方案吗?记忆并不重要。

4 个答案:

答案 0 :(得分:3)

如果记忆无关紧要:

lines = file.readlines()

line = lines[line_number]

您只需一次读取文件,将其存储在内存中,然后从那里访问它。

编辑:记忆重要的地方:

from itertools import dropwhile

line = next(dropwhile(lambda x: x[0]==line_number, enumerate(file)))[1]

我们可以使用itertools.dropwhile()忽略这些行,直到我们找到所需的行。

答案 1 :(得分:1)

在循环上方使用此内容:

with open('in.txt') as f:
 lines=[ln for ln in f]

现在可以访问循环中的任何行号:

lines[line_number]

答案 2 :(得分:1)

def getLine(fileObj, lineNo):
    [fileObj.readline() for i in xrange(lineNo - 1)]
    return fileObj.readline()

答案 3 :(得分:0)

其他做法

import linecache
linecache.getline('myfile', line_number)