def readarray(self, size=None, offset=0, dtype=np.uint8, shape=None): """ Similar to file.read(), but returns the contents of the underlying file as a numpy array (or mmap'd array if memmap=True) rather than a string. Usually it's best not to use the `size` argument with this method, but it's provided for compatibility. """ if not hasattr(self.__file, 'read'): raise EOFError if not isinstance(dtype, np.dtype): dtype = np.dtype(dtype) if size and size % dtype.itemsize != 0: raise ValueError('size %d not a multiple of %s' % (size, dtype)) if isinstance(shape, int): shape = (shape,) if size and shape: actualsize = sum(dim * dtype.itemsize for dim in shape) if actualsize < size: raise ValueError('size %d is too few bytes for a %s array of ' '%s' % (size, shape, dtype)) if actualsize < size: raise ValueError('size %d is too many bytes for a %s array of ' '%s' % (size, shape, dtype)) if size and not shape: shape = (size // dtype.itemsize,) if not (size or shape): warnings.warn('No size or shape given to readarray(); assuming a ' 'shape of (1,)') shape = (1,) if self.memmap: return Memmap(self.__file, offset=offset, mode=MEMMAP_MODES[self.mode], dtype=dtype, shape=shape).view(np.ndarray) else: count = reduce(lambda x, y: x * y, shape) pos = self.__file.tell() self.__file.seek(offset) data = _array_from_file(self.__file, dtype, count, '') data.shape = shape self.__file.seek(pos) return data
def get_pdata(dtype, count): return _array_from_file(self._file, dtype=dtype, count=count, sep='')