From 25c48354f7e723febf054d70da9bb6407332d174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Fri, 10 Dec 2021 19:43:06 +0100 Subject: [PATCH] feat: add csv2json and json2csv scripts --- .bin/csv2json | 14 ++++++++++++++ .bin/json2csv | 24 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100755 .bin/csv2json create mode 100755 .bin/json2csv diff --git a/.bin/csv2json b/.bin/csv2json new file mode 100755 index 0000000..064e4ef --- /dev/null +++ b/.bin/csv2json @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 + +import csv +import json +import sys +import argparse + +parser = argparse.ArgumentParser() +parser.add_argument("--delimiter", "-d", default=",", help="CSV field separator") + +args = parser.parse_args() + +if __name__ == "__main__": + json.dump(list(csv.DictReader(sys.stdin, delimiter=args.delimiter)), sys.stdout) diff --git a/.bin/json2csv b/.bin/json2csv new file mode 100755 index 0000000..0f1f7a1 --- /dev/null +++ b/.bin/json2csv @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import csv +import json +import sys + +if __name__ == "__main__": + json_list = json.load(sys.stdin) + if not isinstance(json_list, list): + print("JSON object is not a list.", file=sys.stderr) + sys.exit(1) + if len(json_list) == 0: + print("JSON list is empty.", file=sys.stderr) + sys.exit(1) + keys = set() + for element in json_list: + if isinstance(element, dict): + keys |= element.keys() + else: + print("Non-dict element:", element, file=sys.stderr) + sys.exit(1) + writer = csv.DictWriter(sys.stdout, fieldnames=list(keys)) + writer.writeheader() + for element in json_list: + writer.writerow(element)