JavaScript
x
16
16
1
import json
2
import csv
3
4
5
def load_matching_data(min_scores,min_stories,min_units):
6
array = []
7
with open("apartment_building_evaluation.csv", "r") as csv_file:
8
csv_reader = csv.reader(csv_file, delimiter=",")
9
for column in csv_reader:
10
address = column[26]
11
if (int(float(column[2])) >= min_stories) and (int(float(column[3]))>= min_units) and ((float(column[24]))>= min_scores):
12
dict = {"address" : address, "score": float(column[24]), "num_stories": int(float(column[2])), "num_units": int(float(column[3]))}
13
array.append(dict)
14
return array
15
result = load_matching_data(82,28,300)
16
I have gotten this output which is an array of dictionaries which was what I wanted
JavaScript
1
2
1
returned value: [{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337}, {"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336}, {"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463}, {"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500}, {"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369}, {"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493}, {"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388}, {"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496}, {"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575}, {"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406}, {"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342}, {"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319}, {"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}]
2
that I want to upload to a JSON file using this function:
JavaScript
1
9
1
def save_summary(list,string):
2
with open('apartment_summary.json', 'w',encoding='utf-8') as outfile:
3
json.dump(list, outfile)
4
return outfile
5
6
7
8
save_summary(results, 'apartment_summary.json')#appartment_summary.json is the name of the file.
9
I can already upload it to the JSON file. My question is how might I be able to upload this array to the JSON file where each dictionary in the curly brackes are printed onto different lines like this:
JavaScript
1
18
18
1
[
2
{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337},
3
{"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336},
4
{"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463},
5
{"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483},
6
{"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500},
7
{"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369},
8
{"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493},
9
{"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388},
10
{"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369},
11
{"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496},
12
{"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575},
13
{"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406},
14
{"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342},
15
{"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319},
16
{"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}
17
]
18
I have tried using the indent function but it produces this output.
JavaScript
1
93
93
1
[
2
{
3
"address": "252 VICTORIA ST ",
4
"score": 95.0,
5
"num_stories": 37,
6
"num_units": 337
7
},
8
{
9
"address": "320 TWEEDSMUIR AVE ",
10
"score": 93.0,
11
"num_stories": 30,
12
"num_units": 336
13
},
14
{
15
"address": "570 BAY ST ",
16
"score": 100.0,
17
"num_stories": 29,
18
"num_units": 463
19
},
20
{
21
"address": "77 DAVISVILLE AVE ",
22
"score": 90.0,
23
"num_stories": 30,
24
"num_units": 483
25
},
26
{
27
"address": "85-95 THORNCLIFFE PARK DR ",
28
"score": 93.0,
29
"num_stories": 43,
30
"num_units": 500
31
},
32
{
33
"address": "561 SHERBOURNE ST ",
34
"score": 99.0,
35
"num_stories": 43,
36
"num_units": 369
37
},
38
{
39
"address": "140 ERSKINE AVE ",
40
"score": 98.0,
41
"num_stories": 29,
42
"num_units": 493
43
},
44
{
45
"address": "167 CHURCH ST ",
46
"score": 98.0,
47
"num_stories": 28,
48
"num_units": 388
49
},
50
{
51
"address": "22 JOHN ST ",
52
"score": 99.0,
53
"num_stories": 31,
54
"num_units": 369
55
},
56
{
57
"address": "85-95 THORNCLIFFE PARK DR ",
58
"score": 94.0,
59
"num_stories": 43,
60
"num_units": 496
61
},
62
{
63
"address": "45 DUNFIELD AVE ",
64
"score": 91.0,
65
"num_stories": 30,
66
"num_units": 575
67
},
68
{
69
"address": "6 FOREST LANEWAY ",
70
"score": 91.0,
71
"num_stories": 29,
72
"num_units": 406
73
},
74
{
75
"address": "118 BALLIOL ST ",
76
"score": 86.0,
77
"num_stories": 30,
78
"num_units": 342
79
},
80
{
81
"address": "500 DUPLEX AVE ",
82
"score": 87.0,
83
"num_stories": 33,
84
"num_units": 319
85
},
86
{
87
"address": "15 ROEHAMPTON AVE ",
88
"score": 100.0,
89
"num_stories": 36,
90
"num_units": 466
91
}
92
]
93
Can someone please explain to me what I am doing wrong and how I may fix this problem?
Advertisement
Answer
You can do something like
JavaScript
1
11
11
1
import json
2
3
result = [{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337}, {"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336}, {"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463}, {"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500}, {"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369}, {"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493}, {"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388}, {"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496}, {"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575}, {"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406}, {"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342}, {"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319}, {"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}]
4
5
txt = ',n'.join(json.dumps(rec) for rec in result)
6
7
lines = f'[n{txt}n]'
8
9
with open('out.json', 'w') as f:
10
f.write(lines)
11
then lines
should contain the data formatted in the way you want
out.json
after running the above:
JavaScript
1
18
18
1
[
2
{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337},
3
{"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336},
4
{"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463},
5
{"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483},
6
{"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500},
7
{"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369},
8
{"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493},
9
{"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388},
10
{"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369},
11
{"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496},
12
{"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575},
13
{"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406},
14
{"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342},
15
{"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319},
16
{"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}
17
]
18