diff options
author | Julian Taylor <jtaylor.debian@googlemail.com> | 2014-08-27 15:52:24 +0200 |
---|---|---|
committer | Julian Taylor <jtaylor.debian@googlemail.com> | 2014-08-27 15:52:24 +0200 |
commit | 0210cca2e10199dabc81b64fca2085ab62645b7f (patch) | |
tree | 961185f1c1a0f0ea2a2142937c22370c5b17b7ff /numpy/lib | |
parent | 145422826e34e880eb16a85bea6cee01cb83556f (diff) | |
parent | 709a06d0e9db862a8dd519db13724a4c59de7d69 (diff) | |
download | numpy-0210cca2e10199dabc81b64fca2085ab62645b7f.tar.gz |
Merge pull request #5006 from dhomeier/ioconv_usecols
BUG: fix genfromtxt check of converters when using usecols
Diffstat (limited to 'numpy/lib')
-rw-r--r-- | numpy/lib/npyio.py | 15 | ||||
-rw-r--r-- | numpy/lib/tests/test_io.py | 15 |
2 files changed, 24 insertions, 6 deletions
diff --git a/numpy/lib/npyio.py b/numpy/lib/npyio.py index 21d98efe7..641203f34 100644 --- a/numpy/lib/npyio.py +++ b/numpy/lib/npyio.py @@ -1575,22 +1575,25 @@ def genfromtxt(fname, dtype=float, comments='#', delimiter=None, for (miss, fill) in zipit] # Update the converters to use the user-defined ones uc_update = [] - for (i, conv) in user_converters.items(): + for (j, conv) in user_converters.items(): # If the converter is specified by column names, use the index instead - if _is_string_like(i): + if _is_string_like(j): try: - i = names.index(i) + j = names.index(j) + i = j except ValueError: continue elif usecols: try: - i = usecols.index(i) + i = usecols.index(j) except ValueError: # Unused converter specified continue - # Find the value to test: + else: + i = j + # Find the value to test - first_line is not filtered by usecols: if len(first_line): - testing_value = first_values[i] + testing_value = first_values[j] else: testing_value = None converters[i].update(conv, locked=True, diff --git a/numpy/lib/tests/test_io.py b/numpy/lib/tests/test_io.py index 40a229d14..4038d6a7f 100644 --- a/numpy/lib/tests/test_io.py +++ b/numpy/lib/tests/test_io.py @@ -1085,6 +1085,21 @@ M 33 21.99 control = np.array([2009., 23., 46],) assert_equal(test, control) + def test_dtype_with_converters_and_usecols(self): + dstr = "1,5,-1,1:1\n2,8,-1,1:n\n3,3,-2,m:n\n" + dmap = {'1:1':0, '1:n':1, 'm:1':2, 'm:n':3} + dtyp = [('E1','i4'),('E2','i4'),('E3','i2'),('N', 'i1')] + conv = {0: int, 1: int, 2: int, 3: lambda r: dmap[r.decode()]} + test = np.recfromcsv(TextIO(dstr,), dtype=dtyp, delimiter=',', + names=None, converters=conv) + control = np.rec.array([[1,5,-1,0], [2,8,-1,1], [3,3,-2,3]], dtype=dtyp) + assert_equal(test, control) + dtyp = [('E1','i4'),('E2','i4'),('N', 'i1')] + test = np.recfromcsv(TextIO(dstr,), dtype=dtyp, delimiter=',', + usecols=(0,1,3), names=None, converters=conv) + control = np.rec.array([[1,5,0], [2,8,1], [3,3,3]], dtype=dtyp) + assert_equal(test, control) + def test_dtype_with_object(self): "Test using an explicit dtype with an object" from datetime import date |