টিএল; ডিআর টন মেমরি ব্যবহার না করতে বাফার ব্যবহার করে।
আমরা আপনার সমস্যা মূল অংশ পেতে, আমি বিশ্বাস করি, আমরা যখন সঙ্গে কাজ স্মৃতির প্রভাব বিবেচনা খুব বড় ফাইল । আমরা চাই না যে এই খারাপ ছেলেটি 2 গিগাবাইট ফাইলের জন্য 2 জিগ র্যামের মধ্যে মন্থন করুক , সুতরাং পাস্তোরপিস্তিটি উল্লেখ করেছেন যে, আমরা এই বড় ফাইলগুলিকে খণ্ডগুলিতে ডিল করব!
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 খণ্ডে এই খারাপ ছেলের হ্যাশগুলি আপডেট করছি । এইভাবে আমরা লোকটিকে একসাথে হ্যাশ করতে যে 2 জিবি লাগবে তার চেয়ে অনেক কম স্মৃতি ব্যবহার করব!
আপনি এটি দিয়ে পরীক্ষা করতে পারেন:
$ mkfile 2g bigfile
$ python hashes.py bigfile
MD5: a981130cf2b7e09f4686dc273cf7187e
SHA1: 91d50642dd930e9542c39d36f0516d45f4e1af0d
$ md5 bigfile
MD5 (bigfile) = a981130cf2b7e09f4686dc273cf7187e
$ shasum bigfile
91d50642dd930e9542c39d36f0516d45f4e1af0d bigfile
আশা করি এইটি কাজ করবে!
এছাড়াও এগুলি সমস্তই ডানদিকে সংযুক্ত প্রশ্নে বর্ণিত হয়েছে: পাইথনে বড় ফাইলগুলির MD5 হ্যাশ পান
সংযোজন!
সাধারণত পাইথন লেখার সময় এটি পিপ -8 অনুসরণ করার অভ্যাসে যেতে সহায়তা করে । উদাহরণস্বরূপ, পাইথন ভেরিয়েবলগুলিতে সাধারণত আন্ডারস্কোর বিচ্ছিন্নভাবে উট কেসড থাকে। তবে এটি কেবল শৈলী এবং খারাপ স্টাইল পড়তে হবে এমন লোকদের ব্যতীত কেউই আসলে সেগুলি সম্পর্কে চিন্তা করে না ... যা হতে পারে আপনি এখন থেকে এই কোডগুলি বছর পরে পড়তে পারেন।