El dc 22 de 11 del 2006 a les 11:04 +0100, en/na
[EMAIL PROTECTED] va escriure:
> Hi,
> 
> Is there a fast way to 'export' a complete table to a text file? Now I am 
> iterating  over rows with iterrows() and then use a "for colname in 
> table.colnames" loop  to write each individual value. But this is relatively 
> slow, and I was wondering if someone could give me advice on how to speed 
> things up.

Yes, it is slow, but I can't figure out a faster way to do it. In fact,
this method is quite faster than using a recarray in-memory and only
somewhat slower than native Python printing. Consider this:

import tables
import numpy
from time import time

N=10000
recarray = numpy.zeros(shape=N, dtype='i4,f4')
f = tables.openFile('/tmp/test.h5', 'w')
t = f.createTable('/', 'table', recarray)

ofile = file('/tmp/out.txt', 'w')
t1=time()
for row in t:
    for col in t.colnames:
        ofile.write(str(row[col])+'\t')
    ofile.write('\n')
print "time (original)-->", time()-t1
ofile.close()

ofile = file('/tmp/out2.txt', 'w')
t1=time()
for row in recarray:
    for col in ['f0','f1']:
        ofile.write(str(row[col])+'\t')
    ofile.write('\n')
print "time (recarray)-->", time()-t1
ofile.close()

ofile = file('/tmp/out3.txt', 'w')
t1=time()
for row in xrange(N):
    ofile.writelines(str(row)+'\t'+str(float(row)))
    ofile.write('\n')
print "time (native)-->", time()-t1
ofile.close()

f.close()

The output for my machine is:

time (original)--> 0.402892112732
time (recarray)--> 1.19862508774
time (native)-->   0.267643928528

So, I guess the main bottleneck here is in formatting strings in native
Python.

Cheers,

-- 
Francesc Altet    |  Be careful about using the following code --
Carabos Coop. V.  |  I've only proven that it works, 
www.carabos.com   |  I haven't tested it. -- Donald Knuth


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Pytables-users mailing list
Pytables-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pytables-users

Reply via email to