[Numpy-svn] r5788 - in trunk/numpy/lib: . tests
numpy-svn at scipy.org
numpy-svn at scipy.org
Fri Sep 5 09:58:02 EDT 2008
Author: dhuard
Date: 2008-09-05 08:58:00 -0500 (Fri, 05 Sep 2008)
New Revision: 5788
Modified:
trunk/numpy/lib/io.py
trunk/numpy/lib/tests/test_io.py
Log:
Applied patch from R. May fixing ticket #905 (loadtxt). Fixed other bug occurring when both usecols and converters are provided. Added related regression tests.
Modified: trunk/numpy/lib/io.py
===================================================================
--- trunk/numpy/lib/io.py 2008-09-05 07:00:12 UTC (rev 5787)
+++ trunk/numpy/lib/io.py 2008-09-05 13:58:00 UTC (rev 5788)
@@ -312,7 +312,10 @@
"""
user_converters = converters
-
+
+ if usecols is not None:
+ usecols = list(usecols)
+
if _string_like(fname):
if fname.endswith('.gz'):
import gzip
@@ -373,7 +376,7 @@
# By preference, use the converters specified by the user
for i, conv in (user_converters or {}).iteritems():
if usecols:
- i = usecols.find(i)
+ i = usecols.index(i)
converters[i] = conv
# Parse each line, including the first
Modified: trunk/numpy/lib/tests/test_io.py
===================================================================
--- trunk/numpy/lib/tests/test_io.py 2008-09-05 07:00:12 UTC (rev 5787)
+++ trunk/numpy/lib/tests/test_io.py 2008-09-05 13:58:00 UTC (rev 5788)
@@ -170,7 +170,6 @@
a = np.array([1,2,3,4], int)
assert_array_equal(x, a)
-
def test_missing(self):
c = StringIO.StringIO()
c.write('1,2,3,,5\n')
@@ -180,6 +179,16 @@
a = np.array([1,2,3,-999,5], int)
assert_array_equal(x, a)
+ def test_converters_with_usecols(self):
+ c = StringIO.StringIO()
+ c.write('1,2,3,,5\n6,7,8,9,10\n')
+ c.seek(0)
+ x = np.loadtxt(c, dtype=int, delimiter=',', \
+ converters={3:lambda s: int(s or -999)}, \
+ usecols=(1, 3, ))
+ a = np.array([[2, -999],[7, 9]], int)
+ assert_array_equal(x, a)
+
def test_comments(self):
c = StringIO.StringIO()
c.write('# comment\n1,2,3,5\n')
@@ -221,6 +230,11 @@
x = np.loadtxt(c, dtype=float, usecols=(1,2))
assert_array_equal(x, a[:,1:])
+ # Testing with arrays instead of tuples.
+ c.seek(0)
+ x = np.loadtxt(c, dtype=float, usecols=np.array([1,2]))
+ assert_array_equal(x, a[:,1:])
+
# Checking with dtypes defined converters.
data = '''JOE 70.1 25.3
BOB 60.5 27.9
More information about the Numpy-svn
mailing list