Command line split that understands quotes

Architecture

The split (1) tool is quite useful, but it doesn't recognize quoted fields. This is my solution to this problem.

Raw
#!/usr/bin/env python
import argparse
import csv
import sys


def split(src, delimiter, quotechar, fields, separator):
    reader = csv.reader(src, delimiter=delimiter, quotechar=quotechar)
    for line in reader:
        show = []
        for field in fields:
            try:
                show.append(line[field])
            except IndexError:
                pass
        sys.stdout.write(separator.join(show) + "\n")


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Split string streams")
    parser.add_argument("--delimiter", "-d", type=str, default=",")
    parser.add_argument("--fields", "-f", type=int, nargs="+", default=[0])
    parser.add_argument("--quotechar", "-q", type=str, default='"')
    parser.add_argument("--source", "-s", type=str)
    parser.add_argument(
        "--separator",
        type=str,
        default=" ",
        help="Output separator",
    )
    args = parser.parse_args()
    if args.source is None:
        source = sys.stdin
    else:
        source = open(args.source, "r")
    split(
        source,
        args.delimiter,
        args.quotechar,
        args.fields,
        separator=args.separator,
    )

0 comments

Reply

Cancel reply
Markdown. Syntax highlighting with <code lang="php"><?php echo "Hello, world!"; ?></code> etc.
DjangoPythonBitcoinTuxDebianHTML5 badgeSaltStackUpset confused bugMoneyHackerUpset confused bugX.OrggitFirefoxWindowMakerBashIs it worth the time?i3 window managerWagtailContainerIrssiNginxSilenceUse a maskWorldInternet securityPianoFontGnuPGThunderbirdJenkinshome-assistant-logo