mirror of
https://github.com/KevinMidboe/tableprint.git
synced 2025-10-29 18:00:16 +00:00
changing precision to format_spec, adding hrtime function
This commit is contained in:
@@ -26,7 +26,7 @@ def frame(dataframe, options=None):
|
|||||||
'outer_char' : '|', # the character defining the outer border of the table
|
'outer_char' : '|', # the character defining the outer border of the table
|
||||||
'corner_char' : '+', # printed at the junctions of the table lines
|
'corner_char' : '+', # printed at the junctions of the table lines
|
||||||
'line_char' : '-', # character as part of each horizontal rule
|
'line_char' : '-', # character as part of each horizontal rule
|
||||||
'precision' : '2f' # precision string for formatting numbers
|
'format_spec' : '2f' # format_spec string for formatting numbers
|
||||||
}
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -53,7 +53,7 @@ def table(data, headers, options=None):
|
|||||||
'outer_char' : '|', # the character defining the outer border of the table
|
'outer_char' : '|', # the character defining the outer border of the table
|
||||||
'corner_char' : '+', # printed at the junctions of the table lines
|
'corner_char' : '+', # printed at the junctions of the table lines
|
||||||
'line_char' : '-', # character as part of each horizontal rule
|
'line_char' : '-', # character as part of each horizontal rule
|
||||||
'precision' : '2f' # precision string for formatting numbers
|
'format_spec' : '2f' # format_spec string for formatting numbers
|
||||||
}
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -64,7 +64,7 @@ def table(data, headers, options=None):
|
|||||||
'outer_char': '|',
|
'outer_char': '|',
|
||||||
'corner_char': '+',
|
'corner_char': '+',
|
||||||
'line_char': '-',
|
'line_char': '-',
|
||||||
'precision': '2f'
|
'format_spec': '2f'
|
||||||
}
|
}
|
||||||
|
|
||||||
# user-specified options
|
# user-specified options
|
||||||
@@ -79,7 +79,7 @@ def table(data, headers, options=None):
|
|||||||
headerstr = [hrule, header(headers, column_width=opts['column_width'], outer_char=opts['outer_char']), hrule]
|
headerstr = [hrule, header(headers, column_width=opts['column_width'], outer_char=opts['outer_char']), hrule]
|
||||||
|
|
||||||
# parse each row
|
# parse each row
|
||||||
tablestr = headerstr + [row(d, column_width=opts['column_width'], precision=opts['precision'],
|
tablestr = headerstr + [row(d, column_width=opts['column_width'], format_spec=opts['format_spec'],
|
||||||
outer_char=opts['outer_char']) for d in data]\
|
outer_char=opts['outer_char']) for d in data]\
|
||||||
|
|
||||||
# only add the final border if there was data in the table
|
# only add the final border if there was data in the table
|
||||||
@@ -124,7 +124,7 @@ def header(headers, column_width=10, outer_char='|'):
|
|||||||
return headerstr
|
return headerstr
|
||||||
|
|
||||||
|
|
||||||
def row(values, column_width=10, precision='2f', outer_char='|'):
|
def row(values, column_width=10, format_spec='2f', outer_char='|'):
|
||||||
"""
|
"""
|
||||||
Returns a formatted ASCII row of data
|
Returns a formatted ASCII row of data
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ def row(values, column_width=10, precision='2f', outer_char='|'):
|
|||||||
column_width : int
|
column_width : int
|
||||||
The width of each column (Default: 10)
|
The width of each column (Default: 10)
|
||||||
|
|
||||||
precision : string
|
format_spec : string
|
||||||
The precision format string used to format numbers in the values array (Default: '2f')
|
The precision format string used to format numbers in the values array (Default: '2f')
|
||||||
|
|
||||||
outer_char : string
|
outer_char : string
|
||||||
@@ -149,11 +149,11 @@ def row(values, column_width=10, precision='2f', outer_char='|'):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
assert (type(precision) is str) | (type(precision) is list), \
|
assert (type(format_spec) is str) | (type(format_spec) is list), \
|
||||||
"Precision must be a string or list of strings"
|
"format_spec must be a string or list of strings"
|
||||||
|
|
||||||
if type(precision) is str:
|
if type(format_spec) is str:
|
||||||
precision = [precision] * len(list(values))
|
format_spec = [format_spec] * len(list(values))
|
||||||
|
|
||||||
# mapping function for string formatting
|
# mapping function for string formatting
|
||||||
def mapdata(val):
|
def mapdata(val):
|
||||||
@@ -171,7 +171,7 @@ def row(values, column_width=10, precision='2f', outer_char='|'):
|
|||||||
raise ValueError('Elements in the values array must be strings, ints, or floats')
|
raise ValueError('Elements in the values array must be strings, ints, or floats')
|
||||||
|
|
||||||
# string formatter
|
# string formatter
|
||||||
fmt = map(mapdata, zip(values, precision))
|
fmt = map(mapdata, zip(values, format_spec))
|
||||||
|
|
||||||
# build the base string
|
# build the base string
|
||||||
basestr = (' %s ' % outer_char).join(fmt)
|
basestr = (' %s ' % outer_char).join(fmt)
|
||||||
@@ -210,3 +210,63 @@ def hr(ncols, column_width=10, corner_char='+', line_char='-'):
|
|||||||
hrstr = corner_char.join([('{:%s^%i}' % (line_char, column_width+2)).format('') for _ in range(ncols)])
|
hrstr = corner_char.join([('{:%s^%i}' % (line_char, column_width+2)).format('') for _ in range(ncols)])
|
||||||
|
|
||||||
return corner_char + hrstr[1:-1] + corner_char
|
return corner_char + hrstr[1:-1] + corner_char
|
||||||
|
|
||||||
|
|
||||||
|
def hrtime(t):
|
||||||
|
"""
|
||||||
|
Converts a time in seconds to a reasonable human readable time
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
t : float
|
||||||
|
The number of seconds
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
time : string
|
||||||
|
The human readable formatted value of the given time
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
t = float(t)
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
raise ValueError("Input must be numeric")
|
||||||
|
|
||||||
|
# weeks
|
||||||
|
if t >= 7*60*60*24:
|
||||||
|
weeks = np.floor(t / (7.*60.*60.*24.))
|
||||||
|
timestr = "{:0.0f} weeks, ".format(weeks) + hrtime(t % (7*60*60*24))
|
||||||
|
|
||||||
|
# days
|
||||||
|
elif t >= 60*60*24:
|
||||||
|
days = np.floor(t / (60.*60.*24.))
|
||||||
|
timestr = "{:0.0f} days, ".format(days) + hrtime(t % (60*60*24))
|
||||||
|
|
||||||
|
# hours
|
||||||
|
elif t >= 60*60:
|
||||||
|
hours = np.floor(t / (60.*60.))
|
||||||
|
timestr = "{:0.0f} hours, ".format(hours) + hrtime(t % (60*60))
|
||||||
|
|
||||||
|
# minutes
|
||||||
|
elif t >= 60:
|
||||||
|
minutes = np.floor(t / 60.)
|
||||||
|
timestr = "{:0.0f} min., ".format(minutes) + hrtime(t % 60)
|
||||||
|
|
||||||
|
# seconds
|
||||||
|
elif (t >= 1) | (t == 0):
|
||||||
|
timestr = "{:g} s".format(t)
|
||||||
|
|
||||||
|
# milliseconds
|
||||||
|
elif t >= 1e-3:
|
||||||
|
timestr = "{:g} ms".format(t*1e3)
|
||||||
|
|
||||||
|
# microseconds
|
||||||
|
elif t >= 1e-6:
|
||||||
|
timestr = u"{:g} \u03BCs".format(t*1e6)
|
||||||
|
|
||||||
|
# nanoseconds or smaller
|
||||||
|
else:
|
||||||
|
timestr = "{:g} ns".format(t*1e9)
|
||||||
|
|
||||||
|
return timestr
|
||||||
|
|||||||
Reference in New Issue
Block a user