You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.3 KiB
41 lines
1.3 KiB
import datetime
|
|
from pydoc import pager
|
|
def str_coerce(s,**kwargs):
|
|
if isinstance(s,datetime.datetime):
|
|
return s.strftime(kwargs['datetime_format'])
|
|
else:
|
|
return str(s)
|
|
def print2d(l,datetime_format = "%A, %B %e, %Y %H:%M:%S",seperator= ' | ',spacer = ' ',bottom = '=',l_end = '|',r_end = '|',interactive = False):
|
|
l = [[str_coerce(s,datetime_format = datetime_format) for s in row] for row in l]
|
|
|
|
max_col = []
|
|
for row in l:
|
|
for i,col in enumerate(row):
|
|
try:
|
|
max_col[i] = max(max_col[i],len(col))
|
|
except IndexError:
|
|
max_col.append(len(col))
|
|
|
|
fmt_row = '{content}'
|
|
if l_end:
|
|
fmt_row = f'{l_end} ' + fmt_row
|
|
if r_end:
|
|
fmt_row = fmt_row + f' {r_end}'
|
|
|
|
done = []
|
|
for row in l:
|
|
content = seperator.join(col.ljust(max_col[i],spacer if i < len(row)-1 or r_end else ' ') for i,col in enumerate(row))
|
|
done.append(fmt_row.format(content = content))
|
|
|
|
if bottom:
|
|
bottom = bottom*len(done[0])
|
|
row_sep = ('\n'+bottom+'\n')
|
|
else:
|
|
row_sep = '\n'
|
|
final = row_sep.join(done)
|
|
if bottom:
|
|
final = '\n'.join((bottom,final,bottom))
|
|
if interactive:
|
|
pager(final)
|
|
else:
|
|
return final
|