CSVに色を付けてみるととても見やすいという話

twitterCSVに色を付けてみるととても見やすいという話があった。実際どうなんだろうと思ったのでテキトウに色を付けて出力してみることにした。

たしかに見やすいかもしれない。

色付きの出力

(CSVのサンプルはこの記事から拝借)

code

import typing as t
import sys
import csv
import itertools

CSI = '\033['
RESET = f"{CSI}39m"


class ColorfulWriter(csv.DictWriter):
    def _dict_to_list(self, rowdict: t.Dict[str, str]) -> t.Sequence[str]:
        colors = itertools.cycle(range(31, 38))
        fields = super()._dict_to_list(rowdict)
        return [f"{CSI}{c}m{field}{RESET}" for c, field in zip(colors, fields)]


def run(f: t.IO, out: t.IO = sys.stdout) -> None:
    r = csv.DictReader(f)
    rows = list(r)
    w = ColorfulWriter(out, fieldnames=list(rows[0].keys()))
    w.writeheader()
    w.writerows(rows)
    out.write(RESET)


def main(argv=None):
    import argparse
    parser = argparse.ArgumentParser(description=None)
    parser.print_usage = parser.print_help
    parser.add_argument('f', type=argparse.FileType("r"))
    parser.add_argument('--out', required=False, default=sys.stdout)
    args = parser.parse_args(argv)
    run(**vars(args))


if __name__ == '__main__':
    main()

追記

console上で見たい場合にはless -Rと繋げると良い

python 00colorful.py <csv file> | less -R

標準入力も受け取れるようにしても良いかもしれない。

追記

上のようにpythonでやるよりもエディタの拡張になっていたほうが便利かも。