栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python最快访问文件中的行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python最快访问文件中的行

我可能只会使用

itertools.islice
。在像文件句柄这样的可迭代对象上使用islice意味着永远不会将整个文件读入内存,并且尽可能快地丢弃前4002行。您甚至可以非常便宜地将所需的两行转换为列表(假设这两行本身不太长)。然后,您可以退出该
with
块,关闭文件句柄。

from itertools import islicewith open('afile') as f:    lines = list(islice(f, 4003, 4005))do_something_with(lines)

更新资料

但是,圣牛的行缓存速度更快,可以进行多次访问。我创建了一个百万行的文件来比较islice和linecache,然后将其删除。

>>> timeit("x=islice(open('afile'), 4003, 4005); print next(x) + next(x)", 'from itertools import islice', number=1)400340040.00028586387634277344>>> timeit("print getline('afile', 4003) + getline('afile', 4004)", 'from linecache import getline', number=1)400240032.193450927734375e-05>>> timeit("getline('afile', 4003) + getline('afile', 4004)", 'from linecache import getline', number=10**5)0.14125394821166992>>> timeit("''.join(islice(open('afile'), 4003, 4005))", 'from itertools import islice', number=10**5)14.732316970825195

不断重新导入和重新读取文件:

这不是一个实际的测试,但是即使在每个步骤中重新导入线缓存,也只比islice慢一秒钟。

>>> timeit("from linecache import getline; getline('afile', 4003) + getline('afile', 4004)", number=10**5)15.613967180252075

结论

是的,对于所有缓存,linecache的速度都比islice快,但它会不断地重新创建linecache,但是谁来做呢?对于可能的情况(一次仅读取几行,一次读取多行),行缓存速度更快,并且呈现简洁的语法,但是该

islice
语法也非常干净快捷,并且永远不会将整个文件读入内存。在RAM密集型环境中,
islice
解决方案可能是正确的选择。对于非常高的速度要求,行缓存可能是更好的选择。但是实际上,在大多数环境中,两次时间都足够小,几乎没有关系。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号