如何将Sleeper API球员字典数据整洁导出为规范CSV?
解决方案
1. 修复当前CSV导出逻辑
players.get_all_players()返回的是以球员ID为键、球员信息字典为值的嵌套字典,你之前的代码直接把所有ID作为表头,用writerow写入整份数据,导致每个ID对应的单元格里塞了完整的球员字典。要改成每行一条球员数据,需要先转换数据结构:
替换导出部分的代码(从toCSV = output开始):
# 转换嵌套字典为球员信息列表,将球员ID加入每个球员的信息字典 player_list = [] for player_id, player_info in output.items(): player_info['player_id'] = player_id # 保留球员ID字段 player_list.append(player_info) # 收集所有球员的字段作为CSV表头(兼容不同球员的字段差异) all_fields = set() for player in player_list: all_fields.update(player.keys()) all_fields = sorted(all_fields) # 排序让表头更规整 # 写入CSV文件 csv_file_path = os.path.join(parent_dir, file, f"{name}.csv") with open(csv_file_path, 'w', encoding='utf8', newline='') as output_file: fc = csv.DictWriter(output_file, fieldnames=all_fields) fc.writeheader() fc.writerows(player_list) # 用writerows批量写入所有球员,而非单条writerow
2. 更优实现方案
用pandas库处理数据会更简洁高效,自动处理字段缺失、表头生成等问题,后续同步其他表格也更方便:
步骤1:安装pandas
pip install pandas
步骤2:替换导出逻辑
把原有的CSV导出代码替换为:
import pandas as pd # 将嵌套字典转换为DataFrame,把球员ID从索引转为单独字段 df = pd.DataFrame.from_dict(output, orient='index').reset_index(names='player_id') # 导出为CSV(index=False避免写入默认索引列) csv_file_path = os.path.join(parent_dir, file, f"{name}.csv") df.to_csv(csv_file_path, index=False, encoding='utf-8')
额外优化建议
- 缓存数据:
get_all_players()数据量大且更新频率低,可将数据缓存到本地JSON/CSV文件,下次运行优先读取缓存,避免重复请求导致卡顿。 - 同步其他表格:用pandas可以直接读取目标电子表格(支持Excel/CSV),然后合并球员数据后再导出,实现自动同步。
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

