-
Notifications
You must be signed in to change notification settings - Fork 225
/
PrettyTable.py
50 lines (48 loc) · 1.98 KB
/
PrettyTable.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# class PrettyTable
class PrettyTable(list):
""" Overridden list class which takes a 2-dimensional list of
the form [[1,2,3],[4,5,6]], and renders HTML and LaTeX Table in
IPython Notebook. For LaTeX export two styles can be chosen."""
def __init__(self, initlist=[], extra_header=None, print_latex_longtable=True):
self.print_latex_longtable = print_latex_longtable
if extra_header is not None:
if len(initlist[0]) != len(extra_header):
raise ValueError("Header list must have same length as data has columns.")
initlist = [extra_header]+list(initlist)
super(PrettyTable, self).__init__(initlist)
def latex_table_tabular(self):
latex = ["\\begin{tabular}"]
latex.append("{"+"|".join((["l"]*len(self[0])))+"}\n")
for row in self:
latex.append(" & ".join(map(format, row)))
latex.append("\\\\ \n")
latex.append("\\end{tabular}")
return ''.join(latex)
def latex_longtable(self):
latex = ["\\begin{longtable}[c]{@{}"]
latex.append("".join((["l"]*len(self[0]))))
latex.append("@{}}\n")
latex.append("\\toprule\\addlinespace\n")
first = True
for row in self:
latex.append(" & ".join(map(format, row)))
latex.append("\\\\\\addlinespace \n")
if first:
latex.append("\\midrule\\endhead\n")
first = False
latex.append("\\bottomrule \n \\end{longtable}")
return ''.join(latex)
def _repr_html_(self):
html = ["<table>"]
for row in self:
html.append("<tr>")
for col in row:
html.append("<td>{0}</td>".format(col))
html.append("</tr>")
html.append("</table>")
return ''.join(html)
def _repr_latex_(self):
if self.print_latex_longtable:
return self.latex_longtable()
else:
return self.latex_table_tabular()