Phlip wrote: > Tx, all!. But... > >> For example I use this function to copy a stream and return a SHA512 and >> the output streams size: >> >> def write(self, in_handle, out_handle): >> m = hashlib.sha512() >> data = in_handle.read(4096) >> while True: >> if not data: >> break >> m.update(data) >> out_handle.write(data) >> data = in_handle.read(4096) >> out_handle.flush() >> return (m.hexdigest(), in_handle.tell()) > > The operation was a success but the patient died. > > My version of that did not return the same hex digest as the md5sum > version: > > > def file_to_hash(path, m = hashlib.md5()): > > with open(path, 'r') as f: > > s = f.read(8192) > > while s: > m.update(s) > s = f.read(8192) > > return m.hexdigest() > > You'll notice it has the same control flow as yours. > > That number must eventually match an iPad's internal MD5 opinion of > that file, after it copies up, so I naturally cannot continue working > this problem until we see which of the two numbers the iPad likes!
- Open the file in binary mode. - Do the usual dance for default arguments: def file_to_hash(path, m=None): if m is None: m = hashlib.md5() -- http://mail.python.org/mailman/listinfo/python-list