Ok, ich lese mal die Doku für Dich vor:flummi hat geschrieben:Was ist der unterschied zwischen str.index und str.find?
Doku hat geschrieben: str.index(sub[, start[, end]])
Like find(), but raise ValueError when the substring is not found.
Das sind absolute Basics, die in jedem Tutorial erklärt werden sollten (im offiziellen sind sie es auf jeden Fall )flummi hat geschrieben: Wie funktioniert diese Methode? Was bringt mir der Index? kann ich an einem bestimmten index splitten? wie geht das?
Aber weil ich mal lieb bin, zeige ich Dir, wie Du das auch leicht selber hättest rausfinden können (genau dafür nutzt man u.a. Python-Shells!):
Code: Alles auswählen
In [12]: s = "Hallo Welt"
In [13]: s.index("Welt")
Out[13]: 6
In [14]: s[6]
Out[14]: 'W'
Es wäre schon nett gewesen, das einmal zu demonstrieren. Ich habe mal ein wenig kombiniert und gemutmaßt, dass Du das so getestet hast:flummi hat geschrieben: ich hab mir folgendes gebastelt, diese funktion soll doppelt splitten.
funktioniert allerdings nur für die erste zeile einer hand um die handnummer herauszufinden.
Code: Alles auswählen
In [15]: data = "PokerStars Game #76620334109: Hold'em No Limit ($0.05/$0.10 USD) - 2012/03/04 6:53:25 ET"
In [16]: strfromstr(data, "#", ":")
76620334109
Ohne Dir zu nahe treten zu wollen: Am besten gar nicht erst einmal! Dein Code strotzt dermaßen von Anti-Pattern, dass man kaum weiß, wo man anfangen soll! Du solltest alles auf null zurück drehen und erst einmal ein Tutorial durch *arbeiten*. Dann versuche die grundlegenden Sprachelemente zu kapieren und selbständig anwenden zu können. Dieses Parsing ist noch eine Nummer zu hoch für Dich.flummi hat geschrieben: ich muss stri.pop (1) solange ausführen solange entweder kein fehler ausgespuckt wird, und falls fehler dann trotzdem mit dem code fortfahren, oder stri.pop (1) solange die liste 2 oder mehr elemente hat.
wie mach ich das jetzt am besten?
Damit Du aber etwas lernst, nehme ich das jetzt mal Schritt für Schritt auseinander... (`data` ist erste Zeile wie oben schon gezeigt)
Code: Alles auswählen
In [22]: res = data.split("#")
In [23]: res
Out[23]:
['PokerStars Game ',
"76620334109: Hold'em No Limit ($0.05/$0.10 USD) - 2012/03/04 6:53:25 ET"]
In [24]: res.pop(0)
Out[24]: 'PokerStars Game '
Code: Alles auswählen
In [25]: res
Out[25]: ["76620334109: Hold'em No Limit ($0.05/$0.10 USD) - 2012/03/04 6:53:25 ET"]
In [26]: str(res)
Out[26]: '["76620334109: Hold\'em No Limit ($0.05/$0.10 USD) - 2012/03/04 6:53:25 ET"]'
Du willst ja in dem Resultat weiterarbeiten... wieso schnappst Du es Dir nicht direkt aus der Liste nach dem `split`? (Wenn Du bei `pop` einen Index mit dem *falschen* Teil angeben kannst, dann kannst Du doch auch gleich das Element hinter dem *gewünschten* Index rauspicken!?!)
Code: Alles auswählen
In [28]: data.split("#")[1]
Out[28]: "76620334109: Hold'em No Limit ($0.05/$0.10 USD) - 2012/03/04 6:53:25 ET"
Danach machst Du den gleichen Fehler noch einmal:
Code: Alles auswählen
In [29]: res = data.split("#")[1]
In [30]: res.split(":")
Out[30]:
['76620334109',
" Hold'em No Limit ($0.05/$0.10 USD) - 2012/03/04 6",
'53',
'25 ET']
Code: Alles auswählen
In [38]: res.split(":")[0]
Out[38]: '76620334109'
So und nun kommt's: Man kann das alles zusammenfassen!
Code: Alles auswählen
In [41]: data.split("#")[1].split(":")[0]
Out[41]: '76620334109'
Ach ja, sinnvoller als das `print` wäre es wohl, das Ergebnis zurückzugeben!
Generell ist diese Lösung aber eher mau. Mittels eines RegExps ließe sich die Nummer viel eleganter und robuster aus dem String holen:
Code: Alles auswählen
In [62]: res = re.search(r"#(?P<hand>\d+):", data)
In [63]: res.groupdict("hand")
Out[63]: {'hand': '76620334109'}
Ich denke Du musst auf jeden Fall erst einmal die Basics lernen. Ein simpler Indexzugriff auf SequenceTypes gehört sicherlich dazu