Python Soap Zeep — Дублирование Результатов

#python #zeep

Вопрос:

Это сбивало меня с толку весь день. Я пытаюсь извлечь содержимое с сервера SOAP через Zeep, но мои результаты дублируют каждую строку. Моя проблема, похоже, возникает, когда я пытаюсь вытащить Lat/Long. Чего мне не хватает?

      {
       'stationID': '1',
        'Country': 'United States',
        'Port': [
            {
                'portNumber': '1',
                'stationName': ABC',
                'Geo': {
                    'Lat': '34',
                    'Long': '-119'
                },
            }
        ],
        'Pricing': [
            {
                'minPrice': 0.0,
     'maxPrice': 0.0
            }
        ],
        'numPorts': 1,
    },
    {
        'stationID': '2,
        'Country': 'United States',
        'Port': [
            {
                'portNumber': '1',
                'stationName': 'DEF,
                'Geo': {
                    'Lat': '35',
                    'Long': '-120'
                },
            }
        ],
        'Pricing': [
            {
                'minPrice': 0.0,
                'maxPrice': 0.0,
            }
        ],
        'numPorts': 1,
    }
 

На данный момент я хотел бы вытащить StationID, stationName, Lat и Long.

 from zeep import Client
from zeep.wsse.username import UsernameToken

s = []
x = []
for (i, d) in enumerate(stationData.stationData):
    row_station = [str(d.stationID)]
    for (p, pt) in enumerate(d.PortID):
        port = [str(pt.stationName)]
        for (g, ge) in enumerate(pt.Geo):
            c = stationData.stationData[i].PortID[p].Geo
            x = [str(c.Lat), str(c.Long)]
            s.append(row_station)
            s.extend(port)
            s.extend(x)
 

ИЗМЕНИТЬ: Пытаюсь сделать форматирование приведенных ниже таблиц более читабельным.

 Current Output
|StationID  | stationName | Lat| Long|
|:--------- | :-----------|:---|:----|
|1          | ABC         | 34 | -119|
|1          | ABC         | 34 | -119|
|2          | DEF         | 35 | -120|
|2          | DEF         | 35 | -120|

Desired Output
|StationID  | stationName | Lat| Long|
|:--------- | :-----------|:---|:----|
|1          | ABC         | 34 | -119|
|2          | DEF         | 35 | -120|
 

Комментарии:

1. Я не вижу здесь никакого МЫЛА

Ответ №1:

Я все понял.

         for (g, ge) in enumerate(pt.Geo):
 

В приведенной выше строке не было необходимости.

 for (i, d) in enumerate(stationData.stationData):
    row_station = [str(d.stationID)]
    for (p, pt) in enumerate(d.PortID):
        port = [str(pt.stationName)]
        c = stationData.stationData[i].PortID[p].Geo
        x = [str(c.Lat), str(c.Long)]
        s.append(row_station)
        s.extend(port)
        s.extend(x)