Python字典请求

2024-04-29 09:28:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从返回XML的API中获取一些信息。我在根上循环,然后是子元素,不过,它只是拾取第一个元素。以下是一些示例xml数据:

<?xml version="1.0" encoding="ISO-8859-1"?>
<result created="2020-06-14T12:54:08-05:00" host="www.systemmonitor.us" status="OK">
<items>
    <site>
        <siteid>144855</siteid>
        <name>
            <![CDATA[NC 99 S]]>
        </name>
        <connection_ok>1</connection_ok>
        <creation_date/>
        <primary_router/>
        <secondary_router/>
    </site>
    <site>
        <siteid>148578</siteid>
        <name>
            <![CDATA[Trial Accounts]]>
        </name>
        <connection_ok>1</connection_ok>
        <creation_date>2013-09-28</creation_date>
        <primary_router/>
        <secondary_router/>
    </site>
    <site>
        <siteid>166088</siteid>
        <name>
            <![CDATA[NEW ACCOUNTS]]>
        </name>
        <connection_ok>1</connection_ok>
        <creation_date>2014-01-08</creation_date>
        <primary_router/>
        <secondary_router/>
    </site>
    <site>
        <siteid>606559</siteid>
        <name>
            <![CDATA[Enhanced]]>
        </name>
        <connection_ok>1</connection_ok>
        <creation_date>2019-09-14</creation_date>
        <primary_router/>
        <secondary_router/>
    </site>
</items>

我的代码包括:

r = requests.get('https://www.systemmonitor.us//api/? 
apikey=*******c&service=list_sites&clientid=%s' % rmmid)
root = ET.fromstring(r.content)
print(root)
sitelist = {}
for child in root.findall('items'):
    for sites in child.findall('site'):
        print(sites)
        site_info = {}
        name = sites.find("name").text
        guid = sites.find("siteid").text

        sitelist[guid] = site_info
        site_info['id'] = guid
        site_info['name'] = name

        for key, value in sitelist.items():
            print(key, value)

        return redirect('/computers/home')

return redirect('/computers/home')

我得到了第一个元素,但它似乎没有循环通过其他元素。我尝试过使用.iter和其他.findall调用。我错过了什么


Tags: nameinfo元素datesiteitemsokconnection
2条回答

在for循环的主体中使用return语句将阻止它循环。return语句将导致控件离开它所在的任何函数

当程序在函数(或函数内部的循环)中有return时,它将中断该函数并“返回”结果(返回关键字后面的表达式值)给调用方。返回语句之后的语句不会执行。如果return语句没有任何表达式,则返回特殊值None

下面的代码将帮助您更好地理解

>>> def explain():
    for i in range(10):
        return(i)


>>> explain()
0
>>> def explain_():
    for i in range(10):
        print(i)
    return "Done"

>>> explain_()
0
1
2
3
4
5
6
7
8
9
'Done'

相关问题 更多 >