76
76
from numerix .mlab import hanning , cov , diff , svd , rand , std
77
77
from numerix .fft import fft , inverse_fft
78
78
79
- from cbook import iterable , is_string_like , to_filehandle , set
79
+ from cbook import iterable , is_string_like , to_filehandle
80
+
81
+ try : set
82
+ except NameError :
83
+ from sets import Set as set
84
+
80
85
81
86
82
87
def mean (x , dim = None ):
@@ -1280,7 +1285,7 @@ def save(fname, X, fmt='%.18e',delimiter=' '):
1280
1285
X .shape = origShape
1281
1286
1282
1287
1283
-
1288
+
1284
1289
1285
1290
def load (fname ,comments = '#' ,delimiter = None , converters = None ,skiprows = 0 ,
1286
1291
usecols = None , unpack = False ):
@@ -1364,7 +1369,7 @@ def csv2rec(fname, comments='#', skiprows=0, checkrows=5, delimiter=','):
1364
1369
numpy recarray.
1365
1370
1366
1371
The data must be regular, same number of values in every row
1367
-
1372
+
1368
1373
A header row is required to automatically assign the recarray
1369
1374
names. The headers will be lower cased, spaces will be converted
1370
1375
to underscores, and illegal attribute name characters removed.
@@ -1376,7 +1381,7 @@ def csv2rec(fname, comments='#', skiprows=0, checkrows=5, delimiter=','):
1376
1381
in the file
1377
1382
1378
1383
skiprows - is the number of rows from the top to skip
1379
-
1384
+
1380
1385
checkrows - is the number of rows to check to validate the column
1381
1386
data type. When set to zero all rows are validated.
1382
1387
@@ -1386,8 +1391,8 @@ def csv2rec(fname, comments='#', skiprows=0, checkrows=5, delimiter=','):
1386
1391
import numpy
1387
1392
import dateutil .parser
1388
1393
parsedate = dateutil .parser .parse
1389
-
1390
-
1394
+
1395
+
1391
1396
fh = to_filehandle (fname )
1392
1397
reader = csv .reader (fh , delimiter = delimiter )
1393
1398
@@ -1410,7 +1415,7 @@ def get_func(item, func):
1410
1415
if func == str :
1411
1416
raise ValueError ('Could not find a working conversion function' )
1412
1417
else : return get_func (item , funcmap [func ]) # recurse
1413
- else : return func
1418
+ else : return func
1414
1419
1415
1420
1416
1421
def get_converters (reader ):
@@ -1427,40 +1432,40 @@ def get_converters(reader):
1427
1432
return converters
1428
1433
1429
1434
1430
- # Get header and remove invalid characters
1435
+ # Get header and remove invalid characters
1431
1436
header = reader .next ()
1432
1437
# remove these chars
1433
1438
delete = set ("""~!@#$%^&*()-=+~\|]}[{';: /?.>,<""" )
1434
1439
delete .add ('"' )
1435
1440
1436
1441
names = []
1437
-
1442
+
1438
1443
for i , item in enumerate (header ):
1439
1444
item = item .strip ().lower ().replace (' ' , '_' )
1440
1445
item = '' .join ([c for c in item if c not in delete ])
1441
1446
if not len (item ):
1442
1447
item = 'column%d' % i
1443
1448
names .append (item )
1444
-
1449
+
1445
1450
# get the converter functions by inspecting checkrows
1446
1451
converters = get_converters (reader )
1447
1452
if converters is None :
1448
1453
raise ValueError ('Could not find any valid data in CSV file' )
1449
-
1454
+
1450
1455
# reset the reader and start over
1451
1456
fh .seek (0 )
1452
1457
process_skiprows (reader )
1453
1458
skipheader = reader .next ()
1454
-
1459
+
1455
1460
# iterate over the remaining rows and convert the data to date
1456
1461
# objects, ints, or floats as approriate
1457
- rows = []
1462
+ rows = []
1458
1463
for i , row in enumerate (reader ):
1459
1464
if not len (row ): continue
1460
1465
if row [0 ].startswith (comments ): continue
1461
1466
rows .append ([func (val ) for func , val in zip (converters , row )])
1462
1467
fh .close ()
1463
-
1468
+
1464
1469
r = numpy .rec .fromrecords (rows , names = names )
1465
1470
return r
1466
1471
0 commit comments