[Numpy-svn] r4856 - in trunk/numpy/core: . tests
numpy-svn at scipy.org
numpy-svn at scipy.org
Mon Mar 10 22:30:17 EDT 2008
Author: stefan
Date: 2008-03-10 21:30:12 -0500 (Mon, 10 Mar 2008)
New Revision: 4856
Modified:
trunk/numpy/core/memmap.py
trunk/numpy/core/tests/test_memmap.py
Log:
Allow file-like object to be used to create a memmap.
Fix NamedTemporaryFile problem for Windows platforms.
Modified: trunk/numpy/core/memmap.py
===================================================================
--- trunk/numpy/core/memmap.py 2008-03-10 16:56:38 UTC (rev 4855)
+++ trunk/numpy/core/memmap.py 2008-03-11 02:30:12 UTC (rev 4856)
@@ -25,8 +25,9 @@
Parameters
----------
- name : filename
- The file name to be used as the array data buffer.
+ filename : string or file-like object
+ The file name or file object to be used as the array data
+ buffer.
dtype : data-type, optional
The data-type used to interpret the file contents.
Default is uint8
@@ -138,7 +139,7 @@
"""
__array_priority__ = -100.0
- def __new__(subtype, name, dtype=uint8, mode='r+', offset=0,
+ def __new__(subtype, filename, dtype=uint8, mode='r+', offset=0,
shape=None, order='C'):
try:
mode = mode_equivalents[mode]
@@ -147,7 +148,10 @@
raise ValueError("mode must be one of %s" % \
(valid_filemodes + mode_equivalents.keys()))
- fid = file(name, (mode == 'c' and 'r' or mode)+'b')
+ if hasattr(filename,'read'):
+ fid = filename
+ else:
+ fid = file(filename, (mode == 'c' and 'r' or mode)+'b')
if (mode == 'w+') and shape is None:
raise ValueError, "shape must be given"
@@ -194,8 +198,7 @@
self._offset = offset
self._mode = mode
self._size = size
- self._name = name
- fid.close()
+ self._name = filename
return self
def __array_finalize__(self, obj):
Modified: trunk/numpy/core/tests/test_memmap.py
===================================================================
--- trunk/numpy/core/tests/test_memmap.py 2008-03-10 16:56:38 UTC (rev 4855)
+++ trunk/numpy/core/tests/test_memmap.py 2008-03-11 02:30:12 UTC (rev 4856)
@@ -14,18 +14,29 @@
self.data = arange(12, dtype=self.dtype)
self.data.resize(self.shape)
- def test_RoundTrip(self):
- fp = memmap(self.tmpfp.name, dtype=self.dtype, mode='w+',
+ def test_roundtrip(self):
+ # Write data to file
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
shape=self.shape)
fp[:] = self.data[:]
- del fp
- newfp = memmap(self.tmpfp.name, dtype=self.dtype, mode='r',
+ del fp # Test __del__ machinery, which handles cleanup
+
+ # Read data back from file
+ newfp = memmap(self.tmpfp, dtype=self.dtype, mode='r',
shape=self.shape)
assert allclose(self.data, newfp)
assert_array_equal(self.data, newfp)
+ def test_open_with_filename(self):
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
+ shape=self.shape)
+ fp[:] = self.data[:]
+
+ memmap(self.tmpfp.name, dtype=self.dtype, mode='r',
+ shape=self.shape)
+
def test_flush(self):
- fp = memmap(self.tmpfp.name, dtype=self.dtype, mode='w+',
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
shape=self.shape)
fp[:] = self.data[:]
fp.flush()
More information about the Numpy-svn
mailing list