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