Python多CSV导入转JSON发POST请求:列表格式问题求助
解决CSV数据插入JSON时的列表格式问题
问题根源
用csv.reader读取每行仅含单个字符串的CSV时,它会把每一行解析成一个单元素列表(比如['YYYYY']),所以pe[i]和cS[i]本质是列表,直接放到JSON里就会出现['pluto']这种格式。你之前尝试的replace方法报错,是因为列表对象没有replace属性;而把整个列表转成字符串的操作,会把整个数据集变成一个大字符串,完全不符合需求。
解决方案
有两种简单的处理方式,选一种即可:
方式1:读取CSV时直接提取单元素(推荐)
在读取CSV的阶段,就把每行的唯一元素取出来,生成纯字符串列表,避免后续额外处理:
import requests from requests.auth import HTTPBasicAuth import csv # 读取p.csv,直接提取每行第一个元素 with open("p.csv", 'r') as P: csvreader1 = csv.reader(P) pe = [row[0] for row in csvreader1] # 读取c.csv同理 with open("c.csv", 'r') as c: csvreader2 = csv.reader(c) cS = [row[0] for row in csvreader2] for i in range(5): headers = { 'accept': '*/*', 'Content-Type': 'application/json', } json_data = { "c": cS[i], # 现在是纯字符串,不再是列表格式 "pe": pe[i], "markers": [ { "name": "Sasa", "date": "2017-08-15", # 注意原代码重复了"data"键,这里修正避免数据覆盖 "perc": "80.95" } ] } print(json_data) basic = HTTPBasicAuth('user', 'pwd') response = requests.post( 'url', auth=basic, headers=headers, json=json_data, )
方式2:使用时提取列表的第一个元素
如果不想修改读取逻辑,在构建JSON的时候直接取列表的第一个元素即可:
# 原读取逻辑保持不变,仅修改json_data部分 json_data = { "c": cS[i][0], # 直接取列表的第一个元素转为字符串 "pe": pe[i][0], "markers": [ { "name": "Sasa", "date": "2017-08-15", "perc": "80.95" } ] }
额外提示
你原代码里的markers字典存在两个相同的data键,这会导致后面的键值对覆盖前面的,建议修改其中一个键名(比如改成date),避免数据丢失。
内容的提问来源于stack exchange,提问作者Rock
相关产品推荐
相关产品推荐

