[docs]defget_text_fingerprint(text,hash_meth,encoding="utf-8"):""" Use default hash method to return hash value of a piece of string default setting use 'utf-8' encoding. """m=hash_meth()m.update(text.encode(encoding))returnm.hexdigest()
DEFAULT_CHUNK_SIZE=1<<20
[docs]defget_file_fingerprint(abspath,hash_meth,nbytes=0,chunk_size=DEFAULT_CHUNK_SIZE):""" :param abspath: :param hash_meth: one of ``hashlib.md5``, ``hashlib.sha256``, ``hashlib.sha512`` :param nbytes: :param chunk_size: :return: """ifnbytes<0:raiseValueError("chunk_size cannot smaller than 0")ifchunk_size<1:raiseValueError("chunk_size cannot smaller than 1")if(nbytes>0)and(nbytes<chunk_size):chunk_size=nbytesm=hash_meth()withopen(abspath,"rb")asf:ifnbytes:# use first n byteshave_reads=0whileTrue:have_reads+=chunk_sizeifhave_reads>nbytes:n=nbytes-(have_reads-chunk_size)ifn:data=f.read(n)m.update(data)breakelse:data=f.read(chunk_size)m.update(data)else:# use entire contentwhileTrue:data=f.read(chunk_size)ifnotdata:breakm.update(data)returnm.hexdigest()
alpha_digits=string.ascii_letters+string.digits
[docs]defrandom_string(length):""" Generate Random String. """return"".join([random.choice(alpha_digits)for_inrange(length)])