我必须打开几千个文件,但只读取前三行。
目前,我这样做:
def test_readline(filename):
fid = open(filename, 'rb')
lines = [fid.readline() for i in range(3)]
产生结果:
最慢的跑步比最快跑的时间长10.20倍。这可以 表示正在缓存中间结果。 10000循环,最好的 3:每回路59.2μs
另一种解决方案是将fid转换为列表:
def test_list(filename):
fid = open(filename, 'rb')
lines = list(fid)
%timeit test_list(MYFILE)
最慢的跑步比最快跑的时间长4.92倍。这可以 表示正在缓存中间结果。 10000循环,最好的 3:每循环374μs
让人惊讶!!是否有更快的方法只读取这些文件的前3行,或者readline()最好?你能回答替代方案和时间吗?
但是在一天结束时,我必须打开数千个单独的文件,它们不会被缓存。因此,它是否重要(看起来像它)?
(603μs未缓存方法读数线与1840μs列表方法)
此外,这里是readlines()方法:
def test_readlines(filename):
fid = open(filename, 'rb')
lines = fid.readlines()
return lines
最慢的跑步比最快跑的时间长7.17倍。这可以 表示正在缓存中间结果。 10000循环,最好的 3:每循环334μs
答案 0 :(得分:1)
您可以使用itertools.islice
:
import itertools
def test_list(filename):
with open(filename, 'r', encoding='utf-8') as f:
return list(itertools.islice(f, 3))
(我稍微更改了open
,因为按行读取二进制模式的文件有点不寻常,但你可以将其还原。)