टीएल; डीआर बफ़र्स का उपयोग स्मृति के टन का उपयोग नहीं करने के लिए करते हैं।
हम आपकी समस्या की जड़ तक पहुँचते हैं, मुझे विश्वास है, जब हम बहुत बड़ी फ़ाइलों के साथ काम करने के मेमोरी निहितार्थ पर विचार करते हैं । हम इस बुरे लड़के को 2 गीगाबाइट फ़ाइल के लिए 2 गिग्स के माध्यम से मंथन करने के लिए नहीं चाहते हैं, जैसा कि pasztorpisti बताते हैं, हम उन बड़ी फाइलों के साथ विखंडू में सौदा करते हैं!
import sys
import hashlib
BUF_SIZE = 65536
md5 = hashlib.md5()
sha1 = hashlib.sha1()
with open(sys.argv[1], 'rb') as f:
while True:
data = f.read(BUF_SIZE)
if not data:
break
md5.update(data)
sha1.update(data)
print("MD5: {0}".format(md5.hexdigest()))
print("SHA1: {0}".format(sha1.hexdigest()))
हमने जो किया है, हम 64kb विखंडू में इस बुरे लड़के के अपने हैश को अपडेट कर रहे हैं क्योंकि हम हैशलीब के आसान डंडी अपडेट विधि के साथ चलते हैं । इस तरह हम 2gb की तुलना में बहुत कम मेमोरी का उपयोग करते हैं यह आदमी को एक बार में हैश में ले जाएगा!
आप इसके साथ परीक्षण कर सकते हैं:
$ mkfile 2g bigfile
$ python hashes.py bigfile
MD5: a981130cf2b7e09f4686dc273cf7187e
SHA1: 91d50642dd930e9542c39d36f0516d45f4e1af0d
$ md5 bigfile
MD5 (bigfile) = a981130cf2b7e09f4686dc273cf7187e
$ shasum bigfile
91d50642dd930e9542c39d36f0516d45f4e1af0d bigfile
उम्मीद है की वो मदद करदे!
इसके अलावा यह सब दाहिने हाथ से जुड़े प्रश्न में उल्लिखित है: पायथन में बड़ी फ़ाइलों की MD5 हैश प्राप्त करें
परिशिष्ट!
सामान्य रूप से अजगर लिखते समय यह पेप -8 का अनुसरण करने की आदत में मदद करता है । उदाहरण के लिए, अजगर वेरिएबल्स में आमतौर पर अंडरस्कोर को अलग किया जाता है जो ऊंट नहीं होता है। लेकिन यह सिर्फ शैली है और कोई भी वास्तव में उन चीजों के बारे में परवाह नहीं करता है, सिवाय उन लोगों के बारे में जिन्हें बुरी शैली को पढ़ना है ... जो अब से शायद आप इस कोड को पढ़ रहे हैं।