2017-10-15 209 views
1

我有一個很大的二進制文件(60GB),我想分成幾個較小的。我遍歷了這個文件,並找到了我想用fileObject.tell()方法分割文件的點,所以現在我有一個1000個分割點的數組,名爲file_pointers。我正在尋找一種方法來創建文件掉那些分割點,所以函數看起來像:如何在Python中複製二進制文件的塊?

def split_file(file_object, file_pointers): 
    # Do something here 

,它會爲每塊創建文件。我看到了這個question,但我恐怕Python的循環可能太慢了,我也覺得必須有某種類似的內置函數。

回答

0

這比我想象的要簡單得多,但我會在這裏發佈我的答案,以防萬一任何人想要快速解決方案。以下是從file_pointer[1]複製到file_pointer[2]的示例

with open('train_example.bson', 'rb') as fbson: 
    fbson.seek(file_pointers[1]) 
    bytes_chunk = fbson.read(file_pointers[2] - file_pointers[1]) 
    with open('tmp.bson', 'wb') as output_file: 
     output_file.write(bytes_chunk)