Mercurial > repos > nml > combine_json
annotate combineJSON.py @ 1:661bc10b0612 draft default tip
planemo upload commit 67dd8ca7284a045d8b96fa2bcef60dd101693cca-dirty
author | nml |
---|---|
date | Fri, 13 Apr 2018 13:46:46 -0400 |
parents | 116510205617 |
children |
rev | line source |
---|---|
0
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
1 #!/usr/bin/env python |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
2 import argparse |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
3 import json |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
4 import sys |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
5 |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
6 |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
7 def init_parser(): |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
8 parser = argparse.ArgumentParser( |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
9 prog="combineJSON", |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
10 formatter_class=argparse.RawDescriptionHelpFormatter, |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
11 description="Combine JSON data arrays into a single array") |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
12 parser.add_argument('-i', |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
13 nargs='*', |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
14 help="Input JSON files to be combined") |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
15 parser.add_argument('-o', |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
16 help='Output file name') |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
17 return parser |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
18 |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
19 |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
20 parser = init_parser() |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
21 args = parser.parse_args() |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
22 input_files = args.i |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
23 json_file = [] |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
24 |
1
661bc10b0612
planemo upload commit 67dd8ca7284a045d8b96fa2bcef60dd101693cca-dirty
nml
parents:
0
diff
changeset
|
25 if input_files is None or len(input_files) < 1: |
0
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
26 print('Not enough input files. ' |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
27 'Please use -i filename.txt filename1.txt ' |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
28 'to combine JSON data files') |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
29 sys.exit(0) |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
30 |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
31 |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
32 for file_path in input_files: |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
33 try: |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
34 # Attempt to open each input file, parse as JSON |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
35 with open(file_path, 'r') as curr_file: |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
36 file_data = curr_file.read() |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
37 parsed_json_file = json.loads(file_data) |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
38 # Append each valid JSON data array |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
39 for entry in parsed_json_file: |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
40 json_file.append(entry) |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
41 except Exception as e: |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
42 print("Help! I can't parse this file {}. " |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
43 "Are you sure this is a valid JSON file?" |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
44 .format(file_path)) |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
45 raise(e) |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
46 |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
47 if args.o: |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
48 with open(args.o, 'w') as out_json: |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
49 json.dump(json_file, out_json) |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
50 else: |
116510205617
planemo upload commit dd7f4dc22bbe2f26aafd07a345997db79d9e5ad1
nml
parents:
diff
changeset
|
51 print(json.dumps(json_file)) |