Anyone who's ever had to type up a large table in LaTeX knows that it can be a bit of work. When faced with a particulalry large table myself, I of course thought "why not python?".
It turns out there are already a few ways to generate latex tables, but here's my take:
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 51 52 53 54 55 56 57 58 59 | """ This short script converts a CSV table into latex table. Command Line Arguments: required positional arguments: infile input file name optional arguments: -h, --help show this help message and exit -ncols N, --numbercolumns N number of columns in file -vd, --verticaldivider adds vertical dividers to table -hd, --horizontaldivider adds horizontal dividers to table """ import csv import sys import argparse # define and parse input arguments parser = argparse.ArgumentParser() parser.add_argument("infile", help="input file name") parser.add_argument("-ncols", "--numbercolumns", type=int, help="number of columns in file", default=2) parser.add_argument("-vd", "--verticaldivider", action="store_true", help="adds vertical dividers to table") parser.add_argument("-hd", "--horizontaldivider", action="store_true", help="adds horizontal dividers to table") args = parser.parse_args() # csv input and latex table output files infile = args.infile outfile = infile +".table" with open(infile, 'r') as inf: with open(outfile, 'w') as out: reader = csv.reader(inf) # build the table beginning code based on number of columns and args # columns all left justified code_header = "\\begin{tabular}{" for i in range(args.numbercolumns): code_header += " l " if i < args.numbercolumns - 1 and args.verticaldivider: code_header += "|" code_header += "}\n\\hline\n" out.write(code_header) # begin writing data for row in reader: # replace "," with "&" if args.horizontaldivider: out.write(" & ".join(row) + " \\\\ \\hline\n") else: out.write(" & ".join(row) + " \\\\ \n") if not args.horizontaldivider: out.write("\\hline\n") out.write("\\end{tabular}") |
Example input file:
1,2,3 4,5,6
Running with the -vd and -hd flags to specify vertical and horizontal dividers produces:
\begin{tabular}{ l | l | l } \hline 1 & 2 & 3 \\ \hline 4 & 5 & 6 \\ \hline \end{tabular}
It's very minimal, and the main idea is that it does 95% of the work for you, leaving only very minor cosmetic tweaks.