dotfiles

.local/bin/csv2json [raw] [blame]
 1#!/usr/bin/env python3
 2
 3import argparse
 4import json
 5import sys
 6from csv import DictReader
 7from typing import Any, Dict, List, Optional, TextIO
 8
 9
10def csv2json(fp: TextIO, fields: Optional[List[str]]) -> None:
11    reader = DictReader(fp, fieldnames=fields)
12
13    for row in reader:
14        json.dump(row, sys.stdout)
15        print()
16
17
18if __name__ == '__main__':
19    parser = argparse.ArgumentParser()
20    parser.add_argument(
21        'file', nargs='?', type=argparse.FileType('r'), default=sys.stdin
22    )
23    parser.add_argument('--field', dest='fields', action='append')
24    args = parser.parse_args()
25
26    csv2json(args.file, args.fields)