diff --git a/bin/logtool b/bin/logtool index 780fdd4f2880173c8f6912aa66c78c28769b5ae8..7b66471ae6a5133b8d67905aca5de734c5b914d5 100755 --- a/bin/logtool +++ b/bin/logtool @@ -10,7 +10,9 @@ FILE is a log saved from a code run. COMMANDS may be one of the following: "list" to list the available variables, "plot expr_x,expr_y" to plot a graph, -"datafile outfile expr_x,expr_y" to write out a data file.""" +"datafile outfile expr_x,expr_y" to write out a data file. +"table variable" to print the full data table for a time series variable. +""" parser = OptionParser(usage="%prog FILE COMMANDS FILE COMMANDS...", description=description) @@ -40,8 +42,8 @@ following: did_plot = False while args: - if args[0] == "list": - args.pop(0) + cmd = args.pop(0) + if cmd == "list": print "Time series" print "-----------" @@ -63,11 +65,8 @@ following: for key, value in items: print "%s\t%s" % (key.ljust(col0_len), str(value)) - elif args[0] == "plot": - args.pop(0) - - expr_x, expr_y = args[0].split(",") - args.pop(0) + elif cmd == "plot": + expr_x, expr_y = args.pop(0).split(",") from pylab import xlabel, ylabel, plot (data_x, descr_x, unit_x), (data_y, descr_y, unit_y) = \ @@ -92,18 +91,15 @@ following: plot(data_x, data_y, hold=True, **kwargs) did_plot = True - elif args[0] == "datafile": - args.pop(0) - - expr_x, expr_y = args[0].split(",") - args.pop(0) + elif cmd == "datafile": + expr_x, expr_y = args.pop(0).split(",") - logmgr.write_datafile(args[0], expr_x, expr_y) - args.pop(0) + logmgr.write_datafile(args.pop(0), expr_x, expr_y) + elif cmd == "table": + print logmgr.quantity_data[args.pop(0)].table else: # not a known command, interpret as file name - logmgr.load(args[0]) - args.pop(0) + logmgr.load(cmd) if did_plot: from pylab import show, title, legend diff --git a/src/datatable.py b/src/datatable.py index d381743b1c676ee82042f5c4da7ed1683a20425b..02bd1ae63763a8fc7421b83686de3a7955e077af 100644 --- a/src/datatable.py +++ b/src/datatable.py @@ -20,6 +20,9 @@ class DataTable: if len(self.column_indices) != len(self.column_names): raise RuntimeError, "non-unique column names encountered" + def __bool__(self): + return bool(self.data) + def __len__(self): return len(self.data) @@ -28,10 +31,13 @@ class DataTable: def __str__(self): """Return a pretty-printed version of the table.""" - col_widths = [ - max(len(self.column_names[i]), - max(len(str(row[i])) for row in self.data)) - for i in range(len(self.column_names))] + + def col_width(i): + width = len(self.column_names[i]) + if self: + width = max(width, max(len(str(row[i])) for row in self.data)) + return width + col_widths = [col_width(i) for i in range(len(self.column_names))] def format_row(row): return "|".join([str(cell).ljust(col_width)