Frage von DatAnswerFromMe, 55

Python: Wie lese ich eine Zahl aus einem String mit zusätzlichem Text aus?

Meine Textdatei hat ungefähr diesen Aufbau: Vokabel1 [Lektionsnummer] Vokabel2 [Lektionsnummer] Vokabel 3 [Lektionsnummer]

Info: Die eckigen Klammern sollen nicht die Variable hervorheben, sondern sind wirklich so in der Textdatei vorhanden.

Jetzt möchte ich mit einer For-Schleife die Textdatei durchgehen und immer die Lektionsnummer herausfiltern.

Antwort
von DatAnswerFromMe, 32

Die Formatierung ist etwas falsch. Ich hoffe bei dieser Antwort ist sie richtig...

Textdatei:

Vokabel1 [Nummer]

Vokabel 2 [Nummer]

Vokabel 3 [Nummer]

Antwort
von KillerGoldFisch, 11

Hier eine Lösung mit RegEx:

http://pastebin.com/5S5E9EZm

Antwort
von Linuxhase, 15

Hallo

Wie lese ich eine Zahl aus einem String mit zusätzlichem Text aus?

Ich spreche kein Python, jedenfalls nicht fließend, von daher gibt es eine Shell geprägte Antwort.

Jetzt möchte ich mit einer For-Schleife die Textdatei durchgehen und immer die Lektionsnummer herausfiltern.

Damit meinst Du jetzt entfernen und nur den Rest anzeigen oder genau anders herum?

Vokabel1 [Lektionsnummer] Vokabel2 [Lektionsnummer] Vokabel 3 [Lektionsnummer]

Vielleicht hilft Dir auf die Schnelle das hier weiter:

for i in $(ls -1 *.txt); do grep -E [[[:Digit:]]]) $i ; done

Linuxhase

Expertenantwort
von TeeTier, Community-Experte für programmieren, 12

Du könntest mit Regex arbeiten, aber ehrlich gesagt halte ich das in diesem Fall für einen Overkill.

Eine einfache QnD-Lösung wäre folgendes:

for line in fh: # fh => file_handle
voc, les = tuple(x.strip(' \t\r\n]') for x in line.rsplit('[', 1))
les = int(les)

print('"%s" in Lektion %d' % (voc, les))

Fehlertoleranz musst du dir selber einbauen, z. B. wenn eine Zeile leer ist oder falsch formatiert ist. :)

Kommentar von DatAnswerFromMe ,

Danke für deine Antwort. Ich habe es schon anders, ordentlicher gelöst.

PS: Ich meine nicht ordentlicher als deine Lösung, sondern mit einem anderen Weg, auf den du nicht hättest kommen können ^^

Kommentar von Linuxhase ,

@DatAnswerFromMe

sondern mit einem anderen Weg, auf den du nicht hättest kommen können ^^

Es wäre angebracht diese Lösung zu offenbaren damit jeder der über diese Frage stolpert auch auf eine Lösung kommt bzw. die Wahl zwischen mehreren hat.

Linuxhase

Antwort
von glasair, 28

Ich kann leider nur C#, aber in Python müsste es auch so gehen: In die foreach-Schleife kommt die Liste mit allen Zeilen. Für jede Zeile als String suchst du dann den Substring ab der Stelle mit dem [ bis zur letzten Stelle des ].

Keine passende Antwort gefunden?

Fragen Sie die Community