@@ -1365,14 +1365,17 @@ def load(fname,comments='#',delimiter=None, converters=None,skiprows=0,
1365
1365
else : return X
1366
1366
1367
1367
def csv2rec (fname , comments = '#' , skiprows = 0 , checkrows = 5 , delimiter = ',' ,
1368
- converterd = None ):
1368
+ converterd = None , names = None ):
1369
1369
"""
1370
1370
Load data from comma/space/tab delimited file in fname into a
1371
1371
numpy record array and return the record array.
1372
1372
1373
- A header row is required to automatically assign the recarray
1374
- names. The headers will be lower cased, spaces will be converted
1375
- to underscores, and illegal attribute name characters removed.
1373
+ If names is None, a header row is required to automatically assign
1374
+ the recarray names. The headers will be lower cased, spaces will
1375
+ be converted to underscores, and illegal attribute name characters
1376
+ removed. If names is not None, it is a sequence of names to use
1377
+ for the column names. In this case, it is assumed there is no header row.
1378
+
1376
1379
1377
1380
fname - can be a filename or a file handle. Support for gzipped
1378
1381
files is automatic, if the filename ends in .gz
@@ -1388,9 +1391,12 @@ def csv2rec(fname, comments='#', skiprows=0, checkrows=5, delimiter=',',
1388
1391
converterd, if not None, is a dictionary mapping column number or
1389
1392
munged column name to a converter function
1390
1393
1394
+
1391
1395
See examples/loadrec.py
1392
1396
"""
1393
1397
1398
+
1399
+
1394
1400
if converterd is None :
1395
1401
converterd = dict ()
1396
1402
@@ -1431,6 +1437,8 @@ def get_converters(reader):
1431
1437
converters = [int ]* len (row )
1432
1438
if checkrows and i > checkrows :
1433
1439
break
1440
+ #print i, len(names), len(row)
1441
+ #print 'converters', zip(converters, row)
1434
1442
for j , (name , item ) in enumerate (zip (names , row )):
1435
1443
func = converterd .get (j )
1436
1444
if func is None :
@@ -1443,25 +1451,28 @@ def get_converters(reader):
1443
1451
1444
1452
1445
1453
# Get header and remove invalid characters
1446
- headers = reader .next ()
1447
- # remove these chars
1448
- delete = set ("""~!@#$%^&*()-=+~\|]}[{';: /?.>,<""" )
1449
- delete .add ('"' )
1450
-
1451
- names = []
1452
- seen = dict ()
1453
- for i , item in enumerate (headers ):
1454
- item = item .strip ().lower ().replace (' ' , '_' )
1455
- item = '' .join ([c for c in item if c not in delete ])
1456
- if not len (item ):
1457
- item = 'column%d' % i
1458
-
1459
- cnt = seen .get (item , 0 )
1460
- if cnt > 0 :
1461
- names .append (item + '%d' % cnt )
1462
- else :
1463
- names .append (item )
1464
- seen [item ] = cnt + 1
1454
+
1455
+ needheader = names is None
1456
+ if needheader :
1457
+ headers = reader .next ()
1458
+ # remove these chars
1459
+ delete = set ("""~!@#$%^&*()-=+~\|]}[{';: /?.>,<""" )
1460
+ delete .add ('"' )
1461
+
1462
+ names = []
1463
+ seen = dict ()
1464
+ for i , item in enumerate (headers ):
1465
+ item = item .strip ().lower ().replace (' ' , '_' )
1466
+ item = '' .join ([c for c in item if c not in delete ])
1467
+ if not len (item ):
1468
+ item = 'column%d' % i
1469
+
1470
+ cnt = seen .get (item , 0 )
1471
+ if cnt > 0 :
1472
+ names .append (item + '%d' % cnt )
1473
+ else :
1474
+ names .append (item )
1475
+ seen [item ] = cnt + 1
1465
1476
1466
1477
1467
1478
@@ -1473,7 +1484,8 @@ def get_converters(reader):
1473
1484
# reset the reader and start over
1474
1485
fh .seek (0 )
1475
1486
process_skiprows (reader )
1476
- skipheader = reader .next ()
1487
+ if needheader :
1488
+ skipheader = reader .next ()
1477
1489
1478
1490
# iterate over the remaining rows and convert the data to date
1479
1491
# objects, ints, or floats as approriate
0 commit comments