[Scipy-svn] r6968 - in trunk/scipy/io/matlab: . tests

scipy-svn at scipy.org scipy-svn at scipy.org
Sun Nov 28 10:44:33 EST 2010


Author: ptvirtan
Date: 2010-11-28 09:44:33 -0600 (Sun, 28 Nov 2010)
New Revision: 6968

Modified:
   trunk/scipy/io/matlab/mio.py
   trunk/scipy/io/matlab/tests/test_mio.py
Log:
BUG: io/matlab: close opened stream after reading in loadmat() (fixes #1039)

Modified: trunk/scipy/io/matlab/mio.py
===================================================================
--- trunk/scipy/io/matlab/mio.py	2010-11-28 15:28:17 UTC (rev 6967)
+++ trunk/scipy/io/matlab/mio.py	2010-11-28 15:44:33 UTC (rev 6968)
@@ -154,6 +154,8 @@
         mdict.update(matfile_dict)
     else:
         mdict = matfile_dict
+    if isinstance(file_name, basestring):
+        MR.mat_stream.close()
     return mdict
 
 @docfiller

Modified: trunk/scipy/io/matlab/tests/test_mio.py
===================================================================
--- trunk/scipy/io/matlab/tests/test_mio.py	2010-11-28 15:28:17 UTC (rev 6967)
+++ trunk/scipy/io/matlab/tests/test_mio.py	2010-11-28 15:44:33 UTC (rev 6968)
@@ -5,6 +5,7 @@
 
 '''
 import sys
+import os
 from os.path import join as pjoin, dirname
 from glob import glob
 if sys.version_info[0] >= 3:
@@ -348,7 +349,35 @@
                               expected['x'].todense(),
                               err_msg=repr(actual))
 
+def test_multiple_open():
+    # Ticket #1039, on Windows: check that files are not left open
+    tmpdir = mkdtemp()
+    try:
+        x = dict(x=np.zeros((2, 2)))
 
+        fname = pjoin(tmpdir, "a.mat")
+
+        # Check that file is not left open
+        savemat(fname, x)
+        os.unlink(fname)
+        savemat(fname, x)
+
+        loadmat(fname)
+        os.unlink(fname)
+
+        # Check that stream is left open
+        f = open(fname, 'wb')
+        savemat(f, x)
+        f.seek(0)
+        f.close()
+
+        f = open(fname, 'rb')
+        loadmat(f)
+        f.seek(0)
+        f.close()
+    finally:
+        shutil.rmtree(tmpdir)
+
 def test_mat73():
     # Check any hdf5 files raise an error
     filenames = glob(




More information about the Scipy-svn mailing list