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.

40 lines
1.3 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. fmt_row = '{content}'
  18. if l_end:
  19. fmt_row = f'{l_end} ' + fmt_row
  20. if r_end:
  21. fmt_row = fmt_row + f' {r_end}'
  22. done = []
  23. for row in l:
  24. content = seperator.join(col.ljust(max_col[i],spacer if i < len(row)-1 or r_end else ' ') for i,col in enumerate(row))
  25. done.append(fmt_row.format(content = content))
  26. if bottom:
  27. bottom = bottom*len(done[0])
  28. row_sep = ('\n'+bottom+'\n')
  29. else:
  30. row_sep = '\n'
  31. final = row_sep.join(done)
  32. if bottom:
  33. final = '\n'.join((bottom,final,bottom))
  34. if interactive:
  35. pager(final)
  36. else:
  37. return final