要从txt文件返回特定行以进行进一步操作,此函数必须打开的文件也相当大~500行,因此创建列表然后打印特定行似乎很荒谬。你能建议我另类吗?代码如下:
def returnline(filename, n):
ofile = open(filename, 'r')
filelist = ofile.readlines()
return filelist[n - 1].strip('\n')
答案 0 :(得分:1)
如果您的文件不是数千行,我不会担心优化该位,但是,您可以做的只是继续阅读文件,直到您达到所需的行,并且从那里停止阅读;这样,当文件是5000行,而你想要第10行时,你只需要阅读10行。此外,您需要在打开并读取文件后关闭该文件。
总而言之,就像这样:def line_of_file(fname, linenum):
# this will ensure the file gets closed
# once the with block exits
with open(fname, 'r') as f:
# skip n - 1 lines
for _ in xrange(linenum - 1):
f.readline()
return f.readline().strip('\n')
或者,生成器(惰性列表,类型)可能会提供更好的性能:
from itertools import islice
def line_of_file(fname, linenum):
with open(fname, 'r') as f:
# (lazily) read all lines
lines = f.xreadlines()
# skip until the line we want
lines = islice(lines, linenum - 1, linenum)
# read the next line (the one we want)
return next(lines)
......可缩短为:
from itertools import islice
def line_of_file(fname, linenum):
with open(fname, 'r') as f:
return next(islice(f.xreadlines(),
linenum - 1,
linenum))
(在Python 2.x中,islice(xs, n, m)
与xs[n:m]
类似,只有islice
适用于生成器;请参阅https://docs.python.org/2/library/itertools.html#itertools.islice)