【发布时间】:2019-07-23 22:59:33
【问题描述】:
我创建了一个简短的脚本,它将从 excel 文件中提取数据,将这些数据放入字典中,最终目标是将每个生成的字典发布到我正在使用的 API 中。但无论我做什么,我只能得到要发送的 excel 表中的第一个条目。我在这里错过了什么?
我尝试按正文索引发布,但它说任何高于索引 0 的内容都超出范围,除非我根据索引打印,我可以拉出其中任何一个,并且它们显然存在于 body 变量中。我也尝试通过“员工”变量发布,但它只发布第一组数据。
body = []
for r in range(1, worksheet.nrows):
fname = worksheet.cell(r,0).value
lname = worksheet.cell(r,1).value
email = worksheet.cell(r,2).value
username = worksheet.cell(r,3).value
empid = int(worksheet.cell(r,4).value)
employee = {
"Username": username,
"FirstName": fname,
"LastName": lname,
"Email": email,
"EmployeeID": int(empid),
"IsActive": "true"
}
body.append(employee)
conn = httplib.HTTPSConnection('api-endpoint.com')
conn.request("POST", "/employee/?%s" % params, json.dumps(body), headers)
response = conn.getresponse()
data = json.dumps(response.read())
conn.close()
我不确定这里发生了什么,因为如果我打印正文,我会得到一个字典列表,每个字典都包含正确的员工数据,但是当将它们放入发布请求时,我要么只得到第一个员工被发送到端点,要么没有.
编辑:API 终于回复了我,并且端点不会除了员工列表,因此发布请求必须在 for 循环中。
我的代码现在看起来像这样:
body = []
for r in range(1, worksheet.nrows):
fname = worksheet.cell(r,0).value
lname = worksheet.cell(r,1).value
email = worksheet.cell(r,2).value
username = worksheet.cell(r,3).value
empid = int(worksheet.cell(r,4).value)
employee = {
"Username": username,
"FirstName": fname,
"LastName": lname,
"Email": email,
"EmployeeID": int(empid),
"IsActive": "true"
}
body.append(employee)
for i in body:
conn = httplib.HTTPSConnection('buddypunch.azure-api.net')
conn.request("POST", "/employee/?%s" % params, json.dumps(employee), headers)
response = conn.getresponse()
data = json.dumps(response.read())
conn.close()
我的 Excel 表中有 3 名员工,但只发布了 2 名。身体的输出是这样的:
[{'Email': u'jim@email.com',
'EmployeeID': 80110,
'FirstName': u'Jim',
'IsActive': 'true',
'LastName': u'Halpert',
'Username': u'JimH'},
{'Email': u'don@email.com',
'EmployeeID': 80111,
'FirstName': u'Don',
'IsActive': 'true',
'LastName': u'Julio',
'Username': u'DonJ'},
{'Email': u'toolman@email.com',
'EmployeeID': 80112,
'FirstName': u'Tim',
'IsActive': 'true',
'LastName': u'Toolman',
'Username': u'TimT'}]
那么为什么循环只访问和发布 3 个中的 2 个?
【问题讨论】:
-
我认为最后一部分并不意味着是 for 循环的一部分。
-
它不起作用,所以我在 for 循环中尝试,但如果我现在使用员工变量,我只能发送任何员工数据集
标签: python python-2.7 api python-requests