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)