في بعض السيناريوهات، يصبح من الضروري حساب تجزئة MD5 للملفات الكبيرة التي تتجاوز ذاكرة الوصول العشوائي المتوفرة. وظيفة بايثون الأصلية hashlib.md5() ليست مناسبة لمثل هذه السيناريوهات لأنها تتطلب تحميل الملف بأكمله في الذاكرة.
للتغلب على هذا القيد، النهج العملي هو قراءة الملف في أجزاء يمكن التحكم فيها و تحديث التجزئة بشكل متكرر. وهذا يسمح بحساب التجزئة بكفاءة دون تجاوز حدود الذاكرة.
import hashlib
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()
لحساب تجزئة MD5 لملف، استخدم بناء الجملة التالي:
with open(filename, 'rb') as f:
md5_hash = md5_for_file(f)
سيحتوي المتغير md5_hash على تجزئة MD5 المحسوبة ككائن يشبه البايت.
تأكد من فتح الملف بالنظام الثنائي الوضع ('rb') لتجنب النتائج غير الصحيحة. لمعالجة الملفات بشكل شامل، خذ بعين الاعتبار الوظيفة التالية:
import os
import hashlib
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()
تأخذ هذه الوظيفة مسار الملف وترجع تجزئة MD5 كسلسلة سداسية عشرية.
باستخدام هذه التقنيات، يمكنك حساب تجزئة MD5 بكفاءة للملفات الكبيرة دون مواجهة قيود الذاكرة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3