"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تجزئة الملفات الكبيرة في بايثون دون استهلاك زائد للذاكرة؟

كيفية تجزئة الملفات الكبيرة في بايثون دون استهلاك زائد للذاكرة؟

تم النشر بتاريخ 2024-11-06
تصفح:451

How to Hash Large Files in Python without Memory Overconsumption?

حساب تجزئات MD5 للملفات الكبيرة في بايثون

توفر وحدة hashlib في بايثون واجهة ملائمة لحساب تجزئات التشفير. ومع ذلك، بالنسبة للملفات الكبيرة بشكل استثنائي والتي يتجاوز حجمها ذاكرة النظام، فإن استخدام hashlib مباشرة يمكن أن يكون مشكلة.

الحل: التجزئة التقدمية

لمعالجة هذه المشكلة، نستخدم التجزئة التقدمية من خلال قراءة الملف في أجزاء يمكن التحكم فيها. يضمن هذا الأسلوب تجزئة محتوى الملف بالكامل دون استهلاك ذاكرة زائدة. فيما يلي نموذج لوظيفة بايثون التي تنفذ هذه التقنية:

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 = md5_for_file(f)

ملاحظة حول وضع الملف

تأكد من فتح الملف في الوضع الثنائي باستخدام "rb" للحصول على نتائج دقيقة. يمكن أن يؤدي استخدام "r" إلى حسابات غير صحيحة.

اعتبارات إضافية

للراحة، يتم عرض نسخة محسنة من الوظيفة أدناه:

import hashlib
import os

def generate_file_md5(rootdir, filename):
    m = hashlib.md5()
    with open(os.path.join(rootdir, filename), "rb") as f:
        buf = f.read()
        while buf:
            m.update(buf)
            buf = f.read()
    return m.hexdigest()
يوصى بمراجعة التجزئات المحسوبة باستخدام أدوات خارجية مثل jacksum للتحقق من الدقة.

بيان الافراج أعيد طبع هذه المقالة على: 1729388119 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3