Command line split that understands quotes

The split (1) tool is quite useful, but it doesn't recognize quoted fields. This is my solution to this problem.
#!/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