Python noob在这里。几天来一直在盯着这个,努力让它发挥作用。
以下是代码:
#!/usr/bin/env python
import requests
from requests.auth import HTTPBasicAuth
import json
import sys
import getpass
import itertools
password = 'mypassword'
def getusers():
count = 0
while (count < 1000):
url = "https://blahblah/rest/api/latest/blah/member?groupname=some-group&startAt={0}&maxResults=100".format(count)
request = requests.get(url,auth=HTTPBasicAuth('username', password.format(password)), verify=True)
data = json.loads(request.content)
items = data['values']
global active
active = []
inactive = []
for i in range(len(items)):
user = items[i]
if user['active']:
active.append(user)
#active.append(user.copy())
else:
inactive.append(user.copy())
count += 101
getusers()
print active
计数循环:API每个GET只返回200个结果。这是计数和循环的原因。我正在尝试建立一个包含1000多个条目的字典。
startAt = :默认为从API记录位置开始&#34; 0&#34;。计数将位置增加到101,然后是202,然后是303 ......直到它到达位置1,000。因此,记录从0-101开始并且应该追加,使得我有0-202,然后是0-303,然后是0-404,依此类推。
如果用户[&#39;有效&#39;] :&#39;有效&#39;是为每个用户返回的密钥之一。如果该键= True,则发送到活动的dict,否则发送到不活动的dict。
当前行为: 当我打印我的&#34;活跃&#34; dict我得到了最后一组用户,而不是总共1,000个用户。最后一组用户从位置909开始并在位置1000结束。
预期行为: 当我打印我的&#34;活跃&#34; dict,它应该包含近1000个具有各种键/值的用户。活动用户dict应从位置0开始,以位置=结束活动用户数。
这是从JSON有效负载返回的内容的示例:
u'emailAddress': u'blahblah.com', u'key': u'bblah', u'active': True, u'timeZone': u'America/Los_Angeles'}, {u'displayName': u'Blah, Blah', u'name': u'bblah', u'self': u'https://blah.com'...]
答案 0 :(得分:2)
您的代码中有几点需要注意。
首先,将 active 和 inactive 作为词典调用是不正确的,因为它们似乎是列表,而不是字典。 (参见使用{}和[])
之间的区别其次,您在while循环的每次迭代中将活动和非活动设置为空列表,这似乎是导致问题的原因。每次while循环迭代时, active 和 inactive 都被指定为空列表,而在while循环的上一次迭代期间填充的列表是丢失。相反,您可以在while循环范围之外进行赋值,这样您只能初始化这些列表一次。
def getusers():
global active
active = []
inactive = []
count = 0
while (count < 1000):
url = "https://blahblah/rest/api/latest/blah/member?groupname=some-group&startAt={0}&maxResults=100".format(count)
request = requests.get(url,auth=HTTPBasicAuth('username', password.format(password)), verify=True)
data = json.loads(request.content)
items = data['values']
for i in range(len(items)):
user = items[i]
if user['active']:
active.append(user)
#active.append(user.copy())
else:
inactive.append(user.copy())
count += 101
getusers()
print active