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

  • hidetake takayama

    hidetake tak

    3 Mart 2009
  • Julia Graf

    Julia Graf

    6 Mayıs 2006
  • MultiPlayStationMan

    MultiPlaySta

    17 Aralık 2009