Python isn't necessarily slow

Max M maxm at mxm.dk
Mon Mar 4 06:49:26 EST 2002


Siegfried Gonzi wrote:

Nice report from the trenches!

But your code seems a little verbose.

Maybe I have misunderstood the requirements but how about something like 
(untested):

def readInFloats(file,nHeader=0, whatDel=',',NaN='NIL',NaN_NumPy=-1.0):
     result = []
     f = open(file,'r')
     rows = f.readlines()
     f.close()
     for row in rows:
         resultCol = []
         columns = row.split(whatDel)
         for col in columns:
             try:
                 col = float(col)
             except:
                 col = NaN_NumPy
             resultCol.append(col)
         result.append(resultCol)
     if len(result[-1]) == 0: # empty row in the end?
         return result[:-1]
     else:
         return result


That should return a list of rows, that are lists of numbers.


> def readInFloats(file,nHeader=0, whatDel=',',NaN='NIL',NaN_NumPy=-1.0):
>         f = open(file,'r')
>         s = f.readlines()
>         #
>         cols = 1 + s[nHeader].count(whatDel)
>         rows = len(s) 
>         ergArray = zeros((rows,cols), Float)
>         count_rows = nHeader
>         for x in range(nHeader,rows):
>                 start = 0
>                 floatString = s[x]
>                 if not floatString.isspace():
>                         count_rows = count_rows + 1
>                         for y in range(cols):
>                                 if y < (cols - 1):
>                                         indx =
> floatString[start:].find(whatDel)
>                                         dummy =
> floatString[start:(start+indx)]
>                                         if dummy == NaN:
>                                             ergArray[x,y] = NaN_NumPy
>                                         else:
>                                             ergArray[x,y] = float( dummy
> )
>                                         start = start + indx + 1
>                                 else:
>                                     dummy = floatString[start:]
>                                     if dummy == NaN:
>                                         ergArray[x,y] = NaN_NumPy
>                                     else:
>                                         ergArray[x,y] = float( dummy )
>         print 'fertig'                  
>         return ergArray[nHeader:count_rows,]





More information about the Python-list mailing list