dotfiles

Author: Kyle Fuller <kyle@fuller.li> 2022-09-24 17:24:52 +0100 +0100
Committer: Kyle Fuller <kyle.fuller@oracle.com> 2022-09-24 17:24:52 +0100 +0100
Commit: 415a033a459e3004c906776a524430e3f415ba7e
Parent: 1d1d35120114e2d22123784c47fff9c5079c2544


feat(csv2json): support specifying header names

When a CSV file doesn't have a header, this can be handy to specify.
diff --git a/.local/bin/csv2json b/.local/bin/csv2json
index 7abfb92ad632eb4f891a5d5aad4d07a340065200..f20f5914a0797115cf84b3643a46c1e53f7be473 100755
--- a/.local/bin/csv2json
+++ b/.local/bin/csv2json
@@ -1,22 +1,26 @@
 #!/usr/bin/env python3
 
+import argparse
 import json
 import sys
 from csv import DictReader
-from typing import Any, Dict, TextIO
+from typing import Any, Dict, List, Optional, TextIO
 
 
-def csv2json(fp: TextIO) -> None:
-    reader = DictReader(fp)
+def csv2json(fp: TextIO, fields: Optional[List[str]]) -> None:
+    reader = DictReader(fp, fieldnames=fields)
+
     for row in reader:
         json.dump(row, sys.stdout)
         print()
 
 
 if __name__ == '__main__':
-    for arg in sys.argv[1:]:
-        with open(arg) as fp:
-            csv2json(fp)
+    parser = argparse.ArgumentParser()
+    parser.add_argument(
+        'file', nargs='?', type=argparse.FileType('r'), default=sys.stdin
+    )
+    parser.add_argument('--field', dest='fields', action='append')
+    args = parser.parse_args()
 
-    if len(sys.argv) == 1:
-        csv2json(sys.stdin)
+    csv2json(args.file, args.fields)