Python保存JSON解析结果至CSV时逐字符写入的问题排查
解决CSV逐字符写入的问题
问题出在你直接把单个字符串传给了写入方法——不管是csv.writerow()还是pandas的DataFrame构造方法,都会把字符串当成可迭代对象,自然就拆成单个字符写入了。解决思路很简单:先把所有需要保存的数据收集到一个列表里,再统一处理。
方法一:用原生csv模块
import json import csv # 假设response已正常获取 data = json.loads(response.text) info = data['adapterInstancesInfoDto'] # 先把所有name收集到列表 names = [] for item in info: val = item['resourceKey']['name'] names.append(val) print(val) # 写入CSV文件 with open('output.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) # 可选:写入表头 writer.writerow(['Name']) # 每行传一个列表(不要直接传字符串) for name in names: writer.writerow([name])
也可以用列表推导式简化收集步骤:
names = [item['resourceKey']['name'] for item in info]
方法二:用Pandas
import json import pandas as pd data = json.loads(response.text) info = data['adapterInstancesInfoDto'] # 收集数据并转成DataFrame names = [item['resourceKey']['name'] for item in info] df = pd.DataFrame(names, columns=['Name']) # 保存CSV,index=False去掉自动生成的索引列 df.to_csv('output_pandas.csv', index=False, encoding='utf-8')
关键提醒
不管用哪种方法,绝对不要直接把单个字符串传给写入方法。比如错误写法writer.writerow(val)或者pd.DataFrame(val),都会触发逐字符写入的问题,必须把单个值包装成列表/元组,或者整合成序列后再处理。
内容的提问来源于stack exchange,提问作者Marty G
相关产品推荐
相关产品推荐

