I have looked through several topics about calculating checksums of files in Python but none of them answered the question about one sum from multiple files. I have several files in sub directories and would like to determine if there was any change in one or more of them.
Is there a way to generate one sum from multiple files?
EDIT:
This is the way I do it to get a list of sums:
checksums = [(fname, hashlib.md5(open(fname, 'rb').read()).digest()) for fname in flist]
So I made it :) This way one hash sum is generated for a file list.
hash_obj = hashlib.md5(open(flist[0], 'rb').read())
for fname in flist[1:]:
hash_obj.update(open(fname, 'rb').read())
checksum = hash_obj.digest()
Thank you PM 2Ring for your input!
Note that md5 has been cracked so use it only for non security critical purposes.
Slightly cleaner than Artur's answer. There's no need to treat the first element specially.
def calculate_checksum(filenames):
hash = hashlib.md5()
for fn in filenames:
if os.path.isfile(fn):
hash.update(open(fn, "rb").read())
return hash.digest()
(You can remove the os.path.isfile()
if you like.)