def repair_central_directory(zipFile, is_file_instance): ''' trims trailing data from the central directory code taken from http://stackoverflow.com/a/7457686/570216, courtesy of Uri Cohen ''' f = zipFile if is_file_instance else open(zipFile, 'r+b') data = f.read() if hasattr(data, "decode"): data = data.decode("utf-8") pos = data.find(CENTRAL_DIRECTORY_SIGNATURE) # End of central directory signature if (pos > 0): sio = StringIO(data) sio.seek(pos + 22) # size of 'ZIP end of central directory record' sio.truncate() sio.seek(0) return sio f.seek(0) return f
def repair_central_directory(zipFile, is_file_instance): ''' trims trailing data from the central directory code taken from http://stackoverflow.com/a/7457686/570216, courtesy of Uri Cohen ''' f = zipFile if is_file_instance else open(zipFile, 'r+b') data = f.read() if hasattr(data, "decode"): data = data.decode("utf-8") pos = data.find( CENTRAL_DIRECTORY_SIGNATURE) # End of central directory signature if (pos > 0): sio = StringIO(data) sio.seek(pos + 22) # size of 'ZIP end of central directory record' sio.truncate() sio.seek(0) return sio f.seek(0) return f