2010-03-02 48 views
9

说我有一个12GB的二进制文件,我想从它的中间切片8GB。我知道我想削减的位置指数。Python:切分一个非常大的二进制文件

我该怎么做?显然,12GB不适合内存,这很好,但8GB也不会......我认为这很好,但是如果你用大块做的话,似乎二进制似乎不喜欢它!我一次追加10MB到一个新的二进制文件,新文件中每个10MB块的边缘都有不连续性。

有没有一种Pythonic方式轻松做到这一点?

回答

8

下面是一个简单的例子。根据需要适应:

def copypart(src,dest,start,length,bufsize=1024*1024): 
    with open(src,'rb') as f1: 
     f1.seek(start) 
     with open(dest,'wb') as f2: 
      while length: 
       chunk = min(bufsize,length) 
       data = f1.read(chunk) 
       f2.write(data) 
       length -= chunk 

if __name__ == '__main__': 
    GIG = 2**30 
    copypart('test.bin','test2.bin',1*GIG,8*GIG) 
+0

我没有比这非常类似的东西,它似乎并不喜欢它,用二进制如果你提取数据块从中间无法有时陷入困境的边缘因为它需要其周围的字节才有意义?嗯。尽管欢呼,我会尝试你的代码。你是否也在你的代码的最后一行得到了你的长度和缓冲区? –

+0

这是开始和长度......最后一行使用bufsize的默认值。我不确定你的意思是“边缘化”。如果你需要周围的字节,可能你的开始和长度是不正确的? –

+0

你是对的!我搞砸了自己,现在一切正常:)什么是文件传输的最佳缓冲区大小呢? 1MB好? –

相关问题