TiledViz
Toggle main menu visibility
Loading...
Searching...
No Matches
compare_json.py
1
#!/bin/env python3
2
3
import
sys,os
4
import
argparse
5
import
re
6
import
json
7
import
datetime
8
import
traceback
9
10
errors=sys.stderr
11
def
parse_args(argv):
12
parser = argparse.ArgumentParser(
13
'Compare two nodes.json databases for TiledViz.\n'
+
14
'example : \n'
+\
15
'./compare_json.py -n "AstroIAlastFiles.json" "AstroIA_mean_newtags.json"'
)
16
#parser.add_argument('-c', '--oldcasefile', default=oldcasefile,
17
# help='Old case_config_machine path (default: ANATOMIST Mandelbrot).')
18
parser.add_argument(
'-n'
,
'--file-names'
, nargs=2, required=
True
)
19
parser.add_argument(
'-o'
,
'--out'
, action=
'store_true'
)
20
args = parser.parse_args(argv[1:])
21
return
args
22
23
if
__name__ ==
'__main__'
:
24
args = parse_args(sys.argv)
25
26
with
open(args.file_names[0],
'r'
)
as
fnode1:
27
nodes1=json.load(fnode1)
28
with
open(args.file_names[1],
'r'
)
as
fnode2:
29
nodes2=json.load(fnode2)
30
31
nodes1_s=sorted(nodes1[
"nodes"
], key=
lambda
x: x[
'name'
])
32
ind_nodes1_s=sorted(range(len(nodes1[
"nodes"
])), key=
lambda
k: nodes1[
"nodes"
][k][
'name'
])
33
nodes2_s=sorted(nodes2[
"nodes"
], key=
lambda
x: x[
'name'
])
34
ind_nodes2_s=sorted(range(len(nodes2[
"nodes"
])), key=
lambda
k: nodes2[
"nodes"
][k][
'name'
])
35
print(
"len nodes1,nodes2 : %d,%d "
% (len(nodes1_s),len(nodes2_s)))
36
if
(args.out):
37
file1o=os.path.join(os.path.dirname(args.file_names[0]),
"sorted_"
+os.path.basename(args.file_names[0]))
38
file2o=os.path.join(os.path.dirname(args.file_names[1]),
"sorted_"
+os.path.basename(args.file_names[1]))
39
print(file1o,
"\n"
,file2o)
40
o_nodes1={
"nodes"
:nodes1_s,
"order"
:ind_nodes1_s}
41
with
open(file1o,
'w+'
)
as
fnode1:
42
json.dump(o_nodes1,fnode1)
43
o_nodes2={
"nodes"
:nodes2_s,
"order"
:ind_nodes2_s}
44
with
open(file2o,
'w+'
)
as
fnode2:
45
json.dump(o_nodes2,fnode2)
46
nbsame=0
47
difftile=[]
48
i1=0
49
i2=0
50
#import ipdb; ipdb.set_trace()
51
while
i1 < len(nodes1_s):
52
tile1=nodes1_s[i1]
53
# title1=tile1['title']
54
# url1=tile1['url']
55
# if ("comment" in tile1):
56
# comment1=tile1['comment']
57
# else:
58
# comment1=""
59
tags1=tile1[
'tags'
]
60
name1=tile1[
'name'
]
61
# db1=tile1['dbid']
62
#pass=1
63
while
i2 < len(nodes2_s):
64
tile2=nodes2_s[i2]
65
# print(tile1==tile2)
66
tile1_keys = set(tile1.keys())
67
tile2_keys = set(tile2.keys())
68
shared_keys = tile1_keys.intersection(tile2_keys)
69
shared_keys.remove(
"IdLocation"
)
70
# added = tile1_keys - tile2_keys
71
# removed = tile2_keys - tile1_keys
72
modified = {o : (tile1[o], tile2[o])
for
o
in
shared_keys
if
str(tile1[o]) != str(tile2[o])}
73
same = set(o
for
o
in
shared_keys
if
str(tile1[o]) == str(tile2[o]))
74
allsame=len(modified)==0
75
if
(allsame):
76
nbsame=nbsame+1
77
i2=i2+1
78
break
79
# title2=tile2['title']
80
# url2=tile2['url']
81
# if ("comment" in tile2):
82
# comment2=tile2['comment']
83
# else:
84
# comment2=""
85
tags2=tile2[
'tags'
]
86
name2=tile2[
'name'
]
87
# db2=tile2['dbid']
88
if( name1 == name2 ):
89
if
(
"tags"
in
modified):
90
modified[
"tags"
] = (list(set(tags1) - set(tags2)),list(set(tags2) - set(tags1)))
91
t1=ind_nodes1_s[i1]; t2=ind_nodes2_s[i2]
92
difftile.append({
"t1"
:t1,
"t2"
:t2,
"i1"
:i1,
"i2"
:i2, **modified})
93
i2=i2+1
94
break
95
i2=i2+1
96
#import pdb; pdb.set_trace()
97
i1=i1+1
98
99
print(
"Nb same %d"
% (nbsame))
100
print(
"All diff : %d "
% (len(difftile)))
101
[ print(difft,
"\n"
)
for
difft
in
difftile ]
102
# print(i1,' ',i2,"\n", \
103
# ' ',title1," ",title2, "\n", \
104
# ' ',url1,"\n ",url2, '\n',\
105
# ' ',comment1,'\n ',comment2, '\n', \
106
# ' ',tags1,'\n ',tags2, '\n',\
107
# ' ',name1,' ',name2, '\n',\
108
# db1,' ',db2)
109
TVDatabase
compare_json.py
Documentation for
TiledViz
$tiledvizversion