Python循环导出JSON仅输出最后一项的问题求助
问题分析与解决方案
嘿,我来帮你搞定这个问题~ 你现在遇到的情况很典型:每次循环都在覆盖同一个变量Export_tojson,所以最后只会保留最后一次循环(也就是Retail类别)的结果,而且你也没把每个类别的数据保存下来。下面给你两种实用的解决方案,看你需求选哪种:
方案1:每个类别导出单独的JSON文件
如果希望每个类别的数据分开存储,只需要在循环里给每个JSON文件起不同的名字就行,比如用类别名作为文件名的一部分:
import datetime import pandas as pd today = (datetime.date.today() + datetime.timedelta(days=1)).isoformat() + "T05:00:00" start = (datetime.date.today() - datetime.timedelta(days=7)).isoformat() + "T05:00:00" myList = ['Financials', 'Industry', 'Health Wellbeing', 'Manufacturing', 'Retail'] # 注意:别用list当变量名,这是Python内置的类型,容易出问题,改成category更清晰 for category in myList: filtered = queries.get_mentions(name=category, startDate=start, endDate=today) df = pd.DataFrame(filtered, columns=['account', 'addedtime', 'author', 'id', 'impact', 'snippet']) # 用f-string生成带类别名的文件名,避免覆盖 df.to_json(f'{category}_mentions.json', orient='records')
这样运行后,你会得到5个JSON文件:Financials_mentions.json、Industry_mentions.json……每个文件对应一个类别的数据,不会再被覆盖啦。
方案2:把所有类别数据合并成一个JSON文件
如果希望所有数据存在同一个JSON里,可以用字典来收集每个类别的数据,最后统一导出:
import datetime import pandas as pd import json today = (datetime.date.today() + datetime.timedelta(days=1)).isoformat() + "T05:00:00" start = (datetime.date.today() - datetime.timedelta(days=7)).isoformat() + "T05:00:00" myList = ['Financials', 'Industry', 'Health Wellbeing', 'Manufacturing', 'Retail'] all_category_data = {} for category in myList: filtered = queries.get_mentions(name=category, startDate=start, endDate=today) df = pd.DataFrame(filtered, columns=['account', 'addedtime', 'author', 'id', 'impact', 'snippet']) # 先把DataFrame转成字典格式,方便存入大字典 all_category_data[category] = df.to_dict(orient='records') # 把所有数据写入一个JSON文件,indent=4让格式更美观 with open('all_mentions_data.json', 'w') as json_file: json.dump(all_category_data, json_file, indent=4)
导出的JSON结构会是这样的:
{ "Financials": [{"account": "...", ...}, ...], "Industry": [{"account": "...", ...}, ...], ... }
小提醒
- 尽量别用
list、dict这种Python内置类型的名字当变量名,容易和内置功能冲突,引发奇怪的错误; - 如果你的数据量很大,合并成一个JSON可能会占用较多内存,这时候方案1(单独存文件)会更合适。
内容的提问来源于stack exchange,提问作者Ryan White
相关产品推荐
相关产品推荐

