Source code for csvpp.csvpp

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import csv
from io import StringIO
from itertools import count
import sys
try:
    # Python 2
    from itertools import izip_longest
except ImportError:
    # Python 3
    from itertools import zip_longest as izip_longest

[docs]def csvpp(csv_input): max_widths = [] max_indent = 0 for line in csv.reader(StringIO(csv_input)): widths = [len(s.strip()) for s in line] max_widths = list(map(max, izip_longest(max_widths, widths, fillvalue=0))) indent = len(line[0]) - len(line[0].lstrip()) max_indent = max(max_indent, indent) result = StringIO() for line in csv.reader(StringIO(csv_input)): result.write(u' ' * max_indent) last_column = len(line) - 1 for value, max_width, column in zip(line, max_widths, count()): value = value.strip() result.write(u"" + value) if column != last_column: result.write(u", ") result.write(u" " * (max_width - len(value))) result.write(u'\n') return result.getvalue()
[docs]def main(): csv_input = sys.stdin.read().decode('utf-8') sys.stdout.write(csvpp(csv_input).encode('utf-8'))