回复:脚本中的"更快"I/O

在6月2日,2:08*am," kalakouentin" 如果您的文件适合内存,您可以做
text = file.readlines()
Python会将整个文件读为名称的字符串列表
列表中的每个项目对应于该列表的"文本"
文件.

# 回答1

mihexpory@gmail.com写道:
如果您的文件适合内存,您可以做
text = file.readlines()
Python会将整个文件读为名称的字符串列表
列表中的每个项目对应于该列表的"文本"
文件.
不,这无济于事.那必须做 *所有 *相同的工作(阅读块
并找到线路结尾)作为迭代器加分配和构建列表.
最好只使用迭代器.
对于文件中的行:
...
加里·赫伦
# 回答2


加里·赫伦(Gary Herron)写道:
如果您的文件适合内存,则可以只有dotext = file.readlines(),而Python会将整个文件读取到名为'''的字符串列表中,"列表中的每个项目都对应于thefile的一个"行".
不,这无济于事.那必须做 *所有 *相同的工作(阅读块
并找到线路结尾)作为迭代器加分配和构建列表.
最好只使用迭代器.
对于文件中的行:
...
实际上,这个 *可以 *慢得多.假设我想搜索一个文件
查看是否存在子字符串.
st ="某些实际上没有文件中的子字符串"
f = <50 mb日志文件>
方法1:
对于file(f)中的我:
如果在i中
休息
-0.472416秒
方法2:
阅读整个文件:
fh =文件(f)
rl = fh.read()
fh.close()
-0.098834秒
" RL"测试-0.037251(总计:.136秒)
方法3:
mmap文件:
mm = mmap.mmap(fh.fileno(),0,mmap.map_shared,mmap.prot_read)
" st in mm"测试-3.589938(< - 前几天见我的帖子)
mm.find(ST)-0.186895
概括:
如果您负担得起记忆,它可能会更有效(超过3
在此示例中更快的速度)将文件读取到内存和过程中
一次(如果可能的话).
击败文件并立即处理该文件大约很快(我没有
仔细测量差异),但有一个优势
是您不触摸的文件的一部分,您不会对它们的内存过.
您也可以一次玩更多游戏和MMAP块来限制
内存使用(但是您必须小心的mapping
匹配记录边界).
克里斯

标签: python

添加新评论