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

  • Matt Harding

    Matt Harding

    23 Mayıs 2006
  • MugenPowerBatteries

    MugenPowerBa

    8 EKİM 2010
  • Pál Zoltán Illés

    Pál Zoltán

    30 NİSAN 2007