On Aug 31, 2011, at 4:24 PM, Jean-Baptiste Marquette wrote: > > Hi Pierre, > >> >> On Aug 31, 2011, at 3:40 PM, Jean-Baptiste Marquette wrote: >>> Traceback (most recent call last): >>> File "/Users/marquett/workspace/Distort/src/StatsSep.py", line 44, in >>> <module> >>> np.savetxt(Table, StatsAll, delimiter=' ', fmt=['%15s %.5f %.5f %5d %.4f >>> %.4f']) >>> File >>> "/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/numpy/lib/npyio.py", >>> line 979, in savetxt >>> fh.write(asbytes(format % tuple(row) + newline)) >>> TypeError: not enough arguments for format string >> >> Without knowing StatsAll, it ain't easy… From the exception message, we >> could expect that one of rows is empty or as less than the 6 elements >> required by your format string. >> If you're using IPython, switch to debugger mode (pdb), then inspect row and >> format to find out the content of the offending line. > > Here is a (short) sample of StatsAll: > > [[('bs3000k.cat', 280.60341, -7.09118, 9480, 0.2057, 0.14)]
Have you tried the debugger as I suggested ? There must be a line somewhere that doesn't follow the format (the first one?) >> >>> I struggled with various unsuccessful fmt syntaxes, and the numpy doc is >>> very discrete about that topic: >>> >>> fmt : string or sequence of strings >>> >>> A single format (%10.5f), a sequence of formats >> >> Looks clear enough to me… But yes, a comment in the code shows that " >> `fmt` can be a string with multiple insertion points or a list of formats. >> E.g. '%10.5f\t%10d' or ('%10.5f', '$10d')" (so we should probably update the >> doc to this regard) > > The command with parentheses: > > np.savetxt(Table, StatsAll, delimiter=' ', fmt=('%15s %.5f %.5f %5d > %.4f %.4f')) > > fails as well, but with a different error: Well, either you use 1 string fmt="%15s %.5f %.5f %5d %.4f %.4f" or you use a list of strings fmt=("%15s", "%.5f", "%.5f", "%5d", "%.4f", "%.4f") > > Plus, this one: > > np.savetxt(Table, StatsAll, delimiter=' ', fmt=('%15s', '%.5f', > '%.5f', '%5d', '%.4f', '%.4f')) > > yields: > > Traceback (most recent call last): > File "/Users/marquett/workspace/Distort/src/StatsSep.py", line 44, in > <module> > np.savetxt(Table, StatsAll, delimiter=' ', fmt=('%15s', '%.5f', '%.5f', > '%5d', '%.4f', '%.4f')) > File > "/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/numpy/lib/npyio.py", > line 966, in savetxt > raise AttributeError('fmt has wrong shape. %s' % str(fmt)) > AttributeError: fmt has wrong shape. ('%15s', '%.5f', '%.5f', '%5d', '%.4f', > '%.4f') try fmt=[('%15s', '%.5f', '%.5f', '%5d', '%.4f', '%.4f')] > Quite puzzling... > Should I switch to the I/O of asciitable package ? As you wish. The easiest might be to write the file yourself.: >>> fmt = "%15s %.5f %.5f %5d %.4f %.4f\n" >>> f=open(Table,'r') >>> for line in StatsAll: >>> f.write(fmt % line) >>> f.close() or something like that _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion