you have to use the offset keyword argument of np.memmap, else it will
always start from the beginning of the file

>>> np.memmap(fd, dtype="float32", mode="r", offset=offset)


On Thu, Oct 10, 2013 at 2:43 PM, Andreas Hilboll <li...@hilboll.de> wrote:

> Hi,
>
> I have a problem using memmap correctly. I need to read a data file
> which consists of an ASCII header and appended binary single precision
> floating point values. memmap complains that the "Size of available data
> is not a multiple of the data-type size." But as far as I can tell, the
> size *doas* match the data-type size.
>
> The problem is illustrated by the following code:
>
> ---8<-------
>
> url = "http://www.iup.uni-bremen.de/~hilboll/download/20120204.XD4_N2";
> localfile = "np_memmap.dat"
>
> import os
> import urllib
>
> import numpy as np
>
>
> # download data file
> if not os.access(localfile, os.R_OK):
>   urllib.urlretrieve(url, localfile)
>
> with open(localfile, "r") as fd:
>   # read offset from first line of file
>   offset = int(fd.readlines()[0].split()[-2])
>   # jump to begin of data block
>   fd.seek(offset)
>   # read until EOF
>   blob = fd.read()
>   print("Size of data blob [bytes]: {}".format(len(blob)))
>   print("This can actually be divided by 4: {} / 4.0 = {}".format(
>             len(blob), len(blob) / 4.0))
>   # go back to begin of data block
>   fd.seek(offset)
>   print("But it cannot be loaded as np.memmap with dtype float32:")
>   np.memmap(fd, dtype="float32", mode="r")
>
> ---8<-------
>
> Any help is greatly appreciated :)
>
> -- Andreas.
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to