Python mmap.move()

Python mmap.move(),python,linux,file-io,mmap,Python,Linux,File Io,Mmap,执行mmap.move()时,是否重写了“dest”点之后的整个文件 如果我有一个大文件,比如说一个gig,我只想删除第一行(可能是70个字节?),我可以做一些类似mmap.move(0,70,)的事情,如果需要的话,截短文件末尾的最后70个字节。执行此操作时,整个文件(减去我重写的70个字节)是否完全读写回磁盘 如果是这样的话,有没有办法从文件的开头删除,而不必重新写入整个文件?典型的文件系统没有“在文件开头截断”这样的功能,但您可以想象使用这样的功能创建一种文件格式。例如,如果原始文件如下所

执行
mmap.move()时,
是否重写了“dest”点之后的整个文件

如果我有一个大文件,比如说一个gig,我只想删除第一行(可能是70个字节?),我可以做一些类似
mmap.move(0,70,)
的事情,如果需要的话,截短文件末尾的最后70个字节。执行此操作时,整个文件(减去我重写的70个字节)是否完全读写回磁盘


如果是这样的话,有没有办法从文件的开头删除,而不必重新写入整个文件?

典型的文件系统没有“在文件开头截断”这样的功能,但您可以想象使用这样的功能创建一种文件格式。例如,如果原始文件如下所示:

ABCDEFGHIJKL
您要删除AB:

CDEFGHIJKL
但您不想洗牌所有数据,因此请满足以下要求:

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


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

从文件开头删除数据总是需要重写,这是没有办法的。@MartijnPieters我想是的-只是想确保我没有遗漏有用的内容。