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

  • H3Ctic (old channel)

    H3Ctic (old

    23 Mart 2011
  • magnum33563

    magnum33563

    8 NİSAN 2011
  • Matthew Morrill

    Matthew Morr

    15 EKİM 2011