SORU
15 Temmuz 2009, ÇARŞAMBA


Büyük dosyaların MD5 hash almak Python

Hashlib 2.6/3.0 Python md5 yerine () kullandım ve bir dosya açtım ve hashlib.md5() fonksiyon içeriği koyarsanız iyi çalıştı.

Sorun boyutlarının RAM boyutunu aşan çok büyük dosyaları ile.

Ne kadar belleğe tüm dosya yükleme olmadan bir dosyanın MD5 hash almak için?

CEVAP
15 Temmuz 2009, ÇARŞAMBA


Uygun büyüklükte parçalar halinde dosya okumak gerekir:

def md5_for_file(f, block_size=2**20):
    md5 = hashlib.md5()
    while True:
        data = f.read(block_size)
        if not data:
            break
        md5.update(data)
    return md5.digest()

NOT: bir dosyayı 'rb' aç - aksi takdirde yanlış sonuç elde edersiniz. açık olduğundan emin Olun

Bir yöntem içinde hepsini yapmak gibi bir şey kullanmak için:

def generate_file_md5(rootdir, filename, blocksize=2**20):
    m = hashlib.md5()
    with open( os.path.join(rootdir, filename) , "rb" ) as f:
        while True:
            buf = f.read(blocksize)
            if not buf:
                break
            m.update( buf )
    return m.hexdigest()

Güncelleştirme yukarıdaki yorum Frerich Raabe tarafından sağlanan dayalı - ve bu ve Python 2.7.2 windows yükleme doğru tespit test ettim

Ben çapraz kontrol sonuçları kullanılarak 'jacksum' aracı.

jacksum -a md5 <filename>

"http://www.jonelo.de/java/jacksum/"

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bennythecoder

    Bennythecode

    25 Mart 2008
  • Rugiagialia

    Rugiagialia

    1 Ocak 2008
  • RaverX DouBle StAg XI

    RaverX DouBl

    23 Mayıs 2008