2010-03-02 24 views
9

12GB'lık bir ikili dosyam var ve bunun ortasında 8GB'lık dilimlemek istiyorum. Kesmek istediğim pozisyon indekslerini biliyorum.Python: Çok büyük bir ikili dosyayı dilimleme

Bunu nasıl yaparım? Belli ki 12GB hafızaya sığmaz, bu iyi, ama 8GB de olmaz ... Düşündüğüm şey iyi ama sanki ikili parçalar halinde yaparsanız ikili gibi görünmüyor! Yeni bir ikili dosyaya bir seferde 10MB ekliyordum ve yeni dosyada her 10MB yığınının kenarlarında kesintiler var.

Bunu kolayca yapmanın Pythonic bir yolu var mı?

cevap

8

İşte hızlı bir örnek. Gerektiğinde Uyum:

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

bundan daha çok benzer bir şey yaptı ve ortada dışına veri bloğunu ayıklamak eğer ikili ile hoşuna görünmüyordu can kenarlarında değil bazen pisliği çevreleyen baytların mantıklı olması gerektiği gibi mi? Hmm. Kodunuzu şerefe deneyeceğim. Ayrıca, kodunuzun son satırında uzunluğunuzu aldınız ve yanlış bir şekilde aradınız mı? –

+0

Bu başlangıç ​​ve uzunluk ... son satır bufsize için varsayılanı kullanır. "Kenarlarda karışıklık" ile ne demek istediğinden emin değilim. Çevresel baytlara ihtiyacınız varsa, belki başlangıç ​​ve uzunluklarınız yanlış mı? –

+0

Haklısınız! Kendimi berbat ettim, şimdi her şey çalışıyor :) O zaman dosya aktarımı için en uygun arabellek boyutu nedir? 1MB iyi mi? –

İlgili konular