Ich bin mir nicht sicher, ob dies überhaupt möglich ist, da ich keine genauen Informationen dazu finden konnte. Ich werde versuchen, am besten zu erklären, was ich unten tun möchte.

Ich verwende also die Anforderungsbibliothek, um Informationen von einer API abzurufen. Sobald ich diese Daten habe, benutze ich Regex, um alle Übereinstimmungen für eine bestimmte Information aus der JSON-Ausgabe zu finden.

Der Code, den ich habe, ist:

for i in data['resources']:
        if 'id' in i and 'name' in i:
            b = i['name'], i['id']
            k = str(b)
            if  re.findall("'Server-Ownership-\w+', \w+", k):
                matchedOwners = re.findall("'Server-Ownership-\w+', \w+", k)[0]
                j = str(matchedOwners)
                print(j)

Die Ausgabe dieses Codes gibt mir:

'Server-Ownership-A', 100
'Server-Ownership-B', 200
'Server-Ownership-C', 300
'Server-Ownership-D', 400
'Server-Ownership-E', 500
'Server-Ownership-F', 600
'Server-Ownership-G', 700
'Server-Ownership-H', 800

Was ich tun möchte, ist irgendwie jede Server-Besitzzeile als ihre eigene zu referenzieren, so dass ich die ID am damit verbundenen Ende verwenden kann, um eine Abrufanforderung für jeden Server auszuführen. Mein Problem ist, dass ich keine Möglichkeit finden kann, diese Daten abzurufen. Ich dachte mir vielleicht, ob ich es in json verwandeln und ein 'Name'-Feld für den' Server-Besitz'-Teil und am Ende ein 'ID'-Feld für die IDs erstellen könnte. Ist das überhaupt möglich oder gibt es einen besseren Weg, dies zu erreichen?

Jede Hilfe wird sehr geschätzt!

1
pythonscrub 21 Feb. 2020 im 21:36

3 Antworten

Beste Antwort

Wenn Sie nicht ändern möchten, was Sie bisher geschrieben haben. Ich habe es so geändert, dass Sie ein Wörterbuch für die Serverbesitzer haben können. Wie von Ihnen angefordert, wird alles in matchOwners einem Wörterbuch hinzugefügt.

server_owners_dict=dict()

for i in data['resources']:
    if 'id' in i and 'name' in i:
        b = i['name'], i['id']
        k = str(b)
        if  re.findall("'Server-Ownership-\w+', \w+", k):
            matchedOwners = re.findall("'Server-Ownership-\w+', \w+", k)[0]
            j = str(matchedOwners).strip().split() # get rid of whitespace and split by comma
            server_owners_dict[j[0].replace('Server-Ownership-','')]=j[1]
1
eyllanesc 21 Feb. 2020 im 20:56

Sie müssen die Werte nicht in eine Zeichenfolge einfügen und dann einen regulären Ausdruck verwenden. Testen Sie einfach i['name'] direkt und verwenden Sie es als Wörterbuchschlüssel.

server_owners = {}
for i in data['resources']:
    if 'id' in i and 'name' in i and i['name'].startswith('Server-Ownership-'):
        server_name = i['name'].split('-')[-1] # get A from Server-Ownership-A
        server_owners[server_name] = i['id']

Dies wird ein Dikt wie erstellen

{'A': 100, 'B': 200, 'C': 300, ...}
1
Barmar 21 Feb. 2020 im 18:46

Sie können diese als Wörterbuch speichern und den Wert durch Aufrufen der Schlüssel abrufen.

server_owners_dict = {'Server-Ownership-A': 100,
'Server-Ownership-B': 200,
'Server-Ownership-C': 300,
'Server-Ownership-D': 400,
'Server-Ownership-E': 500,
'Server-Ownership-F': 600,
'Server-Ownership-G': 700,
'Server-Ownership-H': 800}


print(server_owners_dict['Server-Ownership-E'])
500

Ändern Sie den Druck in eine Funktion und geben Sie die ID zurück, die in der Anforderung verwendet werden soll.

1
Nicolaskn 21 Feb. 2020 im 18:42