python - 如何在 JSON 文件的不同行上输出字典数组?
问题描述
import json
import csv
def load_matching_data(min_scores,min_stories,min_units):
array = []
with open("apartment_building_evaluation.csv", "r") as csv_file:
csv_reader = csv.reader(csv_file, delimiter=",")
for column in csv_reader:
address = column[26]
if (int(float(column[2])) >= min_stories) and (int(float(column[3]))>= min_units) and ((float(column[24]))>= min_scores):
dict = {"address" : address, "score": float(column[24]), "num_stories": int(float(column[2])), "num_units": int(float(column[3]))}
array.append(dict)
return array
result = load_matching_data(82,28,300)
我得到了这个输出,它是我想要的字典数组
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}]
我想使用此函数上传到 JSON 文件:
def save_summary(list,string):
with open('apartment_summary.json', 'w',encoding='utf-8') as outfile:
json.dump(list, outfile)
return outfile
save_summary(results, 'apartment_summary.json')#appartment_summary.json is the name of the file.
我已经可以将它上传到 JSON 文件。我的问题是我如何能够将此数组上传到 JSON 文件,其中花括号中的每个字典都打印到不同的行上,如下所示:
[
{"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}
]
我曾尝试使用 indent 函数,但它会产生此输出。
[
{
"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
}
]
有人可以向我解释我做错了什么以及如何解决这个问题吗?
解决方案
这里有一个简单的方法:
import json
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}]
results = (['[\n'] + [',\n'.join(json.dumps(building) for building in result)] + ['\n]'])
upload_json = ''.join(results)
print(upload_json)
输出:
[
{"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}
]
推荐阅读
- php - 关于教义验证的自定义错误消息 2
- reactjs - 如何将material-ui抽屉分为header、main和Footer部分?
- ios - 在通知中点击并且用户未登录时转到特定的视图控制器
- scala - 如何使用类型别名来定义类型构造函数
- python - 检测文本中的小写首字母缩写词
- javascript - 如何使用小书签抓取部分 URL
- node.js - UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server on first connect with Heroku server
- sql-server - “-”附近的语法不正确
- vue.js - Webpack 没有插入 vue 构建
- python-3.x - 如何找到客户每次访问之间的天数差异