1

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

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

4 回答 4

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()忽略这些行,直到找到我们需要的行。

于 2012-05-03T21:13:05.813 回答
1

在循环上方使用它:

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

现在访问循环内的任何行号:

lines[line_number]
于 2012-05-03T21:18:55.387 回答
1
def getLine(fileObj, lineNo):
    [fileObj.readline() for i in xrange(lineNo - 1)]
    return fileObj.readline()
于 2012-05-03T21:29:20.647 回答
0

其他做法

import linecache
linecache.getline('myfile', line_number)
于 2013-01-25T08:49:17.980 回答