2013-09-24 45 views
0

我已经通过网络搜索并花了整整一周的时间搜索这个。现在极度失落。在特定偏移量后删除一定数量的字节

我是新手编程,目前正在寻找一种方法来删除偏移值后的一定数量的字节(这并不意味着删除该偏移量之后的所有内容)。

现在,我唯一有此

filep = open('filepath', 'r+') 
filep.seek(offset in dec) 
#command to delete a set amount of bytes from here 
filep.save() 
filep.close() 

我怎样才能使这一工作去?

回答

0

你不能。你需要重写这个文件。您只能变异的文件,如果任一:

  • 你不改变它们的长度
  • 您从最终

所以,你不得不改变所有的方式覆盖至年底,并截断。我建议重写这个文件,特别是如果你写了一个新文件,然后以原子方式移动它。

2

正如Veedrac已经指出的,最简单的方法是创建一个包含修改内容的新文件。 如果您不再需要原始文件,则可以在move之后新建文件。

以下代码应该可以帮助您创建新文件。

OFFSET = 3 
ENDOFFSET = 4 

with open('file.txt', 'rb') as inputfile, open('out.txt', 'wb') as outfile: 
    outfile.write(inputfile.read(OFFSET - 1)) 
    inputfile.seek(ENDOFFSET) 
    outfile.write(inputfile.read()) 

如果处理文件,with-statement会退出。

+0

我不相信你正在寻找。它不应该更像'inputfile.seek(bytes_to_skip,whence = io.SEEK_CUR)'(是的,从哪里来的)? – Veedrac

+0

感谢您的快速回复!难怪我没有发现这样的事情。所以我将不得不从开始截断到我想要的偏移量,并且从结尾到最后一个我想要去掉的字节的偏移量并将它们结合起来?你可以使用截断函数? – Aesreal

+0

该代码完美适合我!非常感谢你,但我不能给它+因为我缺乏声誉.. – Aesreal

0

这是另一种从文件内删除字节的方法。

def zapper(filepath, offset, length): 
    with open(filepath, 'rb+') as filep: 
     filep.seek(offset + length) 
     data = filep.read() 
     filep.seek(offset) 
     filep.write(data) 
     filep.truncate()