Problem mit .spli()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
chw80
User
Beiträge: 5
Registriert: Mittwoch 20. November 2019, 14:01

Hallo,

ich bin neu hier und fange gerade an mich in die tiefen von python Einzuarbeiten.
Bislang habe ich schon einige kleine Scripte erfolgreich geschrieben.

Aktuell stehe ich jedoch vor einem Problem wo ich nicht weiterkomme.
Ich gebe in einem Herstellertool (darf ich leider nicht nennen) eine Befehl zu Abfrage von Werten ein.
Als Ausgabe erhalte ich (im Teil) folgendes:
...
...
MF List:
main
cfgm
AP List:
srvc-1
srvc-2
...
...

Nun muss ich mit den Werten Arbeiten die unter AP List: vorhanden sind.
Leider kann es hier sein dass keine Werte vorhanden sind oder aber x-beliebig viele.

Wie muss ich hier die Ausgabe splitten um nur mit der Inhalten der AP List zu Arbeiten (die Zahl hinter srvc- reicht mir vollkommen aus)

Viele Grüße und schon einmal danke vorab für die Hilfe.
chw80
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Code: Alles auswählen

for line in ausgabe_zeilen:
     if line.startswith("srvc"):
         number = line.split("-", 1)[1].strip()
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Wie kommst du denn an die Daten? Liest du eine Datei ein oder sprichst du eine API an? Ist das ein kontinuierlicher Strom oder startet und endet er?
Was passiert, sollte ein "srvc"-Eintrag vor AP List stehen? Gibt es ein festes Format oder Protokoll?

Im Zweifelsfall gehst du Zeile für Zeile durch, schaust sie dir an und wenn sie mit "srvc" startet, benutzt du split() um am Minus zu trennen.
chw80
User
Beiträge: 5
Registriert: Mittwoch 20. November 2019, 14:01

Hall,

danke für die Inspriationen.
Habe die Lösung wie folgt (für mich passend) umgesetzt

srv = ("Befehl")[0].split()
for i in srv:
if "srvc" in i:
srvcnr = i.split("srvc-")[1]

Danke.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Das sieht nicht sehr robust aus. Wo ist definiert, dass srvc nicht irgendwo anders im Text vorkommen kann?
Vermeide Abkürzungen. srv sind ja nicht nur die srvc-Teile, sondern alles. `i` sollte man für alles außer ganzen Zahlen nicht benutzen und auch dann nur sehr begrenzt. Dass es `startswith` gibt und das besser ist, als irgendwo in der Zeile zu suchen, wurde Dir schon gesagt. split ist auch nicht dazu gedacht, einen Anfangsteil wegzulöschen.

Code: Alles auswählen

lines = wasauchimmer.splitlines()
for line in lines:
    if line.startswith('srvc-'):
        srcv_number = line[len('srvc-'):]
Das ist auch nicht viel besser, aber da Du nicht verraten willst, was das genau für Daten sind, kann man Dir auch nicht besser helfen.
Antworten