如何将Python打印的API嵌套JSON响应结果正确保存为CSV文件
解决方案
你遇到输出异常的核心原因有两个:
- 循环内反复追加打开输出文件,且没有正确初始化CSV写入器的字段结构
- 之前调用DictWriter时大概率错误传入了字符串而非字典对象,导致字符串被按字符拆分写入多列
以下是可直接运行的修正代码:
import sys import requests import csv # 定义CSV表头字段,和返回字典的键一一对应 field_names = ["domain", "firstSeen", "lastSeen"] # 提前打开输出文件初始化写入器,避免循环内反复操作文件 with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=field_names) # 写入表头,不需要表头可删除这行 writer.writeheader() fList = sys.argv[1] with open(fList, "r", encoding='utf-8-sig') as ins: for line in ins: # 去除读入行首尾的换行、空格,避免URL拼接错误 targetDomain = line.strip() url1 = "https://websitehere={0}".format(targetDomain) response = requests.get(url1).json() for subs in response["result"]["records"]: # 直接传入原生字典对象写入,不要转成字符串 writer.writerow(subs) # 保留打印逻辑做校验 print(subs)
如果你需要新增存储字段,直接在
field_names列表中添加对应字典的键名即可。
之前出现的单字拆分问题就是因为误将字典转成字符串传给了DictWriter,写入器会把字符串视为可迭代对象按字符拆分,直接传入原生字典即可避免该问题。
内容的提问来源于stack exchange,提问作者Shawn
相关产品推荐
相关产品推荐

