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

Python字符串处理优化

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

Python字符串处理优化

如果您确切知道字符串是如何以二进制(ASCII,UTF-8)编码的,则可以一次

mmap

整个 文件存入内存;它的行为就像will 将获得的大
bytearray/bytes
(或
str
在Python
2中)
file.read()
;那么
mmap
可以用
str
正则表达式(Python 2)或
bytes
正则表达式(Python
3)搜索这样的对象。

mmap
是许多操作系统上最快的解决方案,因为只读映射意味着操作系统可以在页面准备就绪时自由地映射它们。不需要交换空间,因为数据由文件支持。操作系统还可以直接将缓冲区缓存中的数据映射为零拷贝,从而在裸读上实现双赢。

例:

import mmapimport repattern = re.compile(b'the ultimate answer is ([0-9]+)')with open("datafile.txt", "rb") as f:    # memory-map the file, size 0 means whole file    mm = mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ)    # PROT_READ only on *nix as the file is not writable    for match in pattern.finditer(mm):        # process match        print("The answer is {}".format(match.group(1).depre('utf8')))    mm.close()

现在,如果

datafile.txt
包含文本:

the ultimate answer is 42

沿着1 GB数据的某个地方,该程序将是最快推出的python解决方案之一:

The answer is 42

请注意,该参数

pattern.finditer
还接受
start
end
参数,这些参数可用于限制尝试匹配的范围。


正如van_pozdeev所指出的,这需要1
GB的可用虚拟地址空间来映射1 GB的文件(但不一定是1
GB的RAM),这在32位进程中可能很困难,但几乎可以肯定地认为是“没有问题的”在64位操作系统和CPU上。在32位进程上,该方法仍然有效,但是您需要将大文件映射为较小的块-
因此,操作系统和处理器的位确实很重要。



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

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

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