@@ -1365,14 +1365,17 @@ def load(fname,comments='#',delimiter=None, converters=None,skiprows=0,
13651365 else : return X
13661366
13671367def csv2rec (fname , comments = '#' , skiprows = 0 , checkrows = 5 , delimiter = ',' ,
1368- converterd = None ):
1368+ converterd = None , names = None ):
13691369 """
13701370 Load data from comma/space/tab delimited file in fname into a
13711371 numpy record array and return the record array.
13721372
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+
13761379
13771380 fname - can be a filename or a file handle. Support for gzipped
13781381 files is automatic, if the filename ends in .gz
@@ -1388,9 +1391,12 @@ def csv2rec(fname, comments='#', skiprows=0, checkrows=5, delimiter=',',
13881391 converterd, if not None, is a dictionary mapping column number or
13891392 munged column name to a converter function
13901393
1394+
13911395 See examples/loadrec.py
13921396 """
13931397
1398+
1399+
13941400 if converterd is None :
13951401 converterd = dict ()
13961402
@@ -1431,6 +1437,8 @@ def get_converters(reader):
14311437 converters = [int ]* len (row )
14321438 if checkrows and i > checkrows :
14331439 break
1440+ #print i, len(names), len(row)
1441+ #print 'converters', zip(converters, row)
14341442 for j , (name , item ) in enumerate (zip (names , row )):
14351443 func = converterd .get (j )
14361444 if func is None :
@@ -1443,25 +1451,28 @@ def get_converters(reader):
14431451
14441452
14451453 # 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
14651476
14661477
14671478
@@ -1473,7 +1484,8 @@ def get_converters(reader):
14731484 # reset the reader and start over
14741485 fh .seek (0 )
14751486 process_skiprows (reader )
1476- skipheader = reader .next ()
1487+ if needheader :
1488+ skipheader = reader .next ()
14771489
14781490 # iterate over the remaining rows and convert the data to date
14791491 # objects, ints, or floats as approriate
0 commit comments