导入多个csv并用于POST请求

wljmcqd8  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(87)

我需要这个需求:

  • 导入多个csv文件
  • 把它们列在一个列表里
  • 将从csv文件中获取的数据插入到json中
  • 在API上发送post请求

我用Python开发了以下脚本:

import requests
from requests.auth import HTTPBasicAuth
import csv

with open("p.csv", 'r') as P:
    csvreader1 = csv.reader(P)
    pe = list(csvreader1)

with open("c.csv", 'r') as c:
    csvreader2 = csv.reader(c)
    cS = list(csvreader2)

for i in range(5):
    headers = {
        'accept': '*/*',
        'Content-Type': 'application/json',
    }

    json_data = {
        "c": cS[i],
        "pe": pe[i],
        "markers": [
            {
                "name": "Sasa",
                "data": "2017-08-15",
                "perc": "80.95",
                "data": "2017-08-15"
            }
        ]
    }
    print(json_data)
    basic = HTTPBasicAuth('user', 'pwd')

    response = requests.post(
        'url',
        auth=basic,
        headers=headers,
        json=json_data,
    )

但问题是,插入到json中的数据被插入为['pluto'],然后做了一些研究,我发现了replace方法,但返回以下错误:
属性错误:“list”对象没有属性“replace”
这个怎么办?我怎么能输入列表数据没有“[”和“]”我已经试过了:

pe = str(pe)
pe=pe.replace("[","")
pe=pe.replace("]","")

还有:

pe = [w.strip().split(']', '') for w in pe]

csv文件的组成如下:

YYYYY
BBBBB
EBBBB
RFFFF
DGGGG
FFFFF
...
umuewwlo

umuewwlo1#

您的值被打印为['pluto'],因为它们是列表,并且列表的字符串 * 表示 * 包含括号。列表的元素是字符串,它们的表示形式包括引号。
您将值视为字符串,但只有当您print()它们时,它们才成为字符串。
它们是列表,因为CSV通常每行可以有多个值。例如,如果您有一个CSV包含:

AAA, BBB, CCC
DDD, EEE, FFF

每一行都将被读取为一个字符串列表:

L1 = ['AAA', 'BBB', 'CCC']
    L2 = ['DDD', 'EEE', 'FFF']

当你写pe = list(csvreader1)时,你创建了一个包含所有这些的新列表:

pe = [
         ['AAA', 'BBB', 'CCC'],
         ['DDD', 'EEE', 'FFF'],
     ]

这意味着pe[idx]是一个列表。
在您的特定情况下,CSV只有一列,因此:

pe = [
         ['AAA'],
         ['BBB'],
         ['CCC'],
         ['DDD'],
         ['EEE'],
         ['FFF'],
     ]

将其展平的“传统”方法是:

pe_new = list()
for pe_item in pe:
    # pe_item is the list, e.g. ['AAAA']
    # pe_item[0] is the string, e.g. 'AAAA'
    pe_new.append(pe_item[0])

列表解析是编写相同代码的一种更短的方法:

pe_new = [pe_item[0] for pe_item in pe]

相关问题