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.

39 lines
1.2 KiB

  1. import datetime
  2. from pydoc import pager
  3. def str_coerce(s,**kwargs):
  4. if isinstance(s,datetime.datetime):
  5. return s.strftime(kwargs['datetime_format'])
  6. else:
  7. return str(s)
  8. def print2d(l,datetime_format = "%A, %B %e, %Y %H:%M:%S",seperator= ' | ',spacer = ' ',bottom = '=',l_end = '|',r_end = '|',interactive = False):
  9. l = [[str_coerce(s,datetime_format = datetime_format) for s in row] for row in l]
  10. max_col = []
  11. for row in l:
  12. for i,col in enumerate(row):
  13. try:
  14. max_col[i] = max(max_col[i],len(col))
  15. except IndexError:
  16. max_col.append(len(col))
  17. if l_end and r_end:
  18. fmt_row = f'{l_end} {{content}} {r_end}'
  19. else:
  20. fmt_row = '{content}'
  21. done = []
  22. for row in l:
  23. content = seperator.join(col.ljust(max_col[i],spacer) for i,col in enumerate(row))
  24. done.append(fmt_row.format(content = content))
  25. if bottom:
  26. bottom = bottom*len(done[0])
  27. row_sep = ('\n'+bottom+'\n')
  28. else:
  29. row_sep = '\n'
  30. final = row_sep.join(done)
  31. if bottom:
  32. final = '\n'.join((bottom,final,bottom))
  33. if interactive:
  34. pager(final)
  35. else:
  36. return final