所有Python向导,
我正在使用mmap将一个巨大的文件(最多8GB)读入内存,我想用正则表达式替换一些字符串,然后保存它。如何实现?
>>> import mmap
>>> import re
>>> f = open('lorem.txt', 'r+')
>>> m = mmap.mmap(f.fileno(), 0)
>>> m.size()
737
我遇到的问题是替换字符串比替换字符串短,所以当我尝试运行替换时,我收到错误消息IndexError: mmap slice assignment is wrong size
。
>>> m[:] = re.sub('[Ll]orem', 'a', m[:])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: mmap slice assignment is wrong size
如果我尝试;
>>> a = re.sub('[Ll]orem','a', m[:])
>>> len(a)
733
>>> m.write(a)
>>> m.flush(0,len(a))
>>> m.size()
737
如您所见,映射文件m的大小仍然相同。这意味着它与替代文本不同!
非常感谢任何帮助。 感谢。
答案 0 :(得分:1)
事实证明,mmap()不能用于增加(或减少)文件的大小。 mmap()的功能是将内存映射到文件的一部分。 最简单的方法是在关闭之前将文件大小截断为新大小:
button.addEventListener("click", function () {
ContactLoader.table(table);
});
如果您认为替换后文件大小会增加,那么只需在打开后增加其大小(例如加倍):
>>> f.truncate(len(a))
>>> f.close()
答案 1 :(得分:0)
如果您打算替换长度不同于起始长度的部分,则必须重新编写该文件。至少从字符串的开头到文件的结尾。
考虑使用较小文件的集合或其他允许变量长度的格式,这些变量可以由最终读取该文件的任何进程解释。