用Python覆盖大文件的一部分

时间:2016-04-24 05:21:54

标签: python io bittorrent

我正在编写一个torrent客户端,并为我必须下载的每个文件在硬盘上分配空间。

文件可能很大,我想覆盖它的一部分而不删除所有内容。

我读了一些其他答案,但他们建议创建一个临时空间,然后再复制更改。那将是一个太沉重的过程。

我确信必须有一些效用。

2 个答案:

答案 0 :(得分:1)

由于您在谈论下载文件,因此应考虑将下载数据存储在临时文件(块)中。参考:streaming& text-file

如果我读到你的问题(没有python),我会说你可以使用操作系统特定的命令来覆盖文件的某些部分。

例如,在Linux中,使用sedawk。 请参阅:Inserting-a-line-in-a-file-at-a-specific-location

答案 1 :(得分:0)

我找到了一个解决方案,使用OS(Linux)特定的系统调用:

fd = os.open(path, os.O_WRONLY)
os.lseek(fd, offset, os.SEEK_SET)
os.write(fd, piece)
os.close(fd)

这确实覆盖了文件而没有使其无效。 但是当时:

with open(path, 'wb') as file:
    file.seek(offset)
    file.write(piece)

它删除了所有其他内容。

程序不可移植,但我不需要它。