我正在从文本文件中读取特定行。这是我的代码:
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(),所以不是更好。
有更快的解决方案吗?记忆并不重要。
答案 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)