内存映射文件是在处理大型二进制文件时使用正则表达式或进行操作的有效方式。
如果我有一个大文本文件(~1GB),是否可以使用支持编码的映射文件来工作?
像 [\u1234-\u5678]
这样的正则表达式不能用于 bytes
对象,将模式转换为 unicode 也不起作用(例如,"[\u1234-\u5678]".encode("utf-32")
将无法正确地理解范围)。
如果我使用 .encode()
将搜索模式从 str
转换为 bytes
,则可能会起作用,但仍然有一定限制,应该有一种更简单的方法而不是整天进行解码和编码。
我尝试将其包装在 io.BufferedRandom
中的 io.TextIOWrapper
中,但没有成功:
AttributeError: 'mmap.mmap' object has no attribute 'seekable'
使用继承创建包装器,并将方法 seekable
、readable
和 writable
设置为返回 True
也没有起作用。
关于编码,可以假定使用固定长度编码,例如 utf-32
、代码点或者 utf-16
的低BMP(如果仅参考该部分可能是可能的)。
欢迎针对任何 Python 版本提供解决方案。
utf-16
、utf-32
或代码点。 - Bharelutf-32
或者utf-16
的低BMP(如果只涉及到这一部分的话)进行编码。是的,文件的编码确实是问题所在。 - Bharel