首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python mmap.move()

Python mmap.move()
EN

Stack Overflow用户
提问于 2013-04-27 04:32:45
回答 1查看 372关注 0票数 0

当执行mmap.move()时,是否重写了'dest‘点之后的整个文件?

如果我有一个很大的文件,比如说在gig上,我只想删除第一行(可能是70个字节?),如果需要的话,我可以像mmap.move(0, 70, <size - 70>)一样截断文件末尾的最后70个字节。执行此操作时,整个文件(减去我覆盖的70字节)是否完全读取并写回磁盘?

如果是这样的话,有没有办法在不重写整个文件的情况下从文件的开头删除?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-27 12:34:53

典型的文件系统没有像“在文件开头截断”这样的特性,但是您可以想象使用这样的特性创建文件格式。例如,如果原始文件是这样的:

代码语言:javascript
复制
ABCDEFGHIJKL

并且您想要删除AB:

代码语言:javascript
复制
CDEFGHIJKL

但是你不想把所有的数据都打乱,所以就接受这个吧:

代码语言:javascript
复制
KLCDEFGHIJ

要支持这一点,您所需要的就是文件“开始”位置的索引,这样您就可以像对待循环缓冲区一样对待它。在这种情况下,索引将从0开始,删除AB后索引将为2,并且您将只复制要删除的数据量(因此操作将是O(m)而不是O(n),其中m是删除的量,n是总大小)。

至于在哪里以及如何存储记账信息,这取决于本机文件格式,以及您使用的文件系统。您甚至可以将其存储在单独的元数据系统中,如数据库,这取决于您的需求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16244764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档