This is my first Python script and I would like to hear the opinion of more experienced users, so I can do it right from the beginning instead of trying to correct my mistakes after months (years?) of coding.
#!/usr/bin/env python
import argparse
import csv
import json
import os
import sys
from pprint import pprint
__author__ = 'RASG'
__version__ = '2018.02.15.1843'
# ------------------------------------------------------------------------------
# Argumentos
# ------------------------------------------------------------------------------
arg_parser = argparse.ArgumentParser(
description = 'csv <-> json converter',
epilog = 'Output files: /tmp/rag-*',
formatter_class = lambda prog: argparse.RawTextHelpFormatter(prog, max_help_position=999)
)
arg_parser.add_argument('-v', '--version', action='version', version=__version__)
argslist = [
('-f', '--file', '(default: stdin) Input file', dict(type=argparse.FileType('r'), default=sys.stdin)),
('-ph', '--header', '(default: %(default)s) Print csv header', dict(action='store_true')),
]
for argshort, arglong, desc, options in argslist: arg_parser.add_argument(argshort, arglong, help=desc, **options)
args = arg_parser.parse_args()
# ------------------------------------------------------------------------------
# Funcoes
# ------------------------------------------------------------------------------
def get_file_ext(f):
file_name, file_ext = os.path.splitext(f.name)
return file_ext.lower()
def csv_to_json(csv_file):
csv_reader = csv.DictReader(csv_file)
output_file = open('/tmp/rag-parsed.json', 'wb')
data = []
for row in csv_reader: data.append(row)
json_data = json.dumps(data, indent=4, sort_keys=True)
output_file.write(json_data + '\n')
def json_to_csv(json_file):
json_reader = json.loads(json_file.read())
output_file = open('/tmp/rag-parsed.csv', 'wb')
campos = json_reader[0].keys()
csv_writer = csv.DictWriter(output_file, fieldnames=campos, extrasaction='ignore', lineterminator='\n')
if args.header: csv_writer.writeheader()
for j in json_reader: csv_writer.writerow(j)
# ------------------------------------------------------------------------------
# Executar
# ------------------------------------------------------------------------------
for ext in [get_file_ext(args.file)]:
if ext == '.csv':
csv_to_json(args.file)
break
if ext == '.json':
json_to_csv(args.file)
break
sys.exit('File type not allowed')