Python Text Splitten

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
KaneWayne
User
Beiträge: 2
Registriert: Sonntag 21. Oktober 2012, 20:59

Hallo,

ich lasse per urllib einen Quelcode einlesen.
Dieser wird natürlich in einer Linie ausggeben.

zb. string = "Bot1: Offline Bot2: Online Bot3: Offline"

ich möchte nun das nach jedem Offline/Online ein Zeilenumbruch gemacht wird.

Danke für jede hilfe !

Mfg

KaneWayne
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Was hast du denn schon versucht, und was hat dabei nicht funktioniert?
KaneWayne
User
Beiträge: 2
Registriert: Sonntag 21. Oktober 2012, 20:59

Naja, ich würde es eigl. über split() machen.
Aber ich weiß nicht genau wie das funktioniert.
Über Google finde ich auch nichts was mir darüber weiterhilft (Anfänger)

Mfg

KaneWayne
BlackJack

@KaneWayne: Dann arbeite mal ein Python-Tutorial durch damit Du Zeichenketten und deren Methoden, unter anderem `split()` kennenlernst, und die anderen grundlegenden Datentypen wie zum Beispiel Listen. In der Python-Dokumentation ist ein Tutorial. Und Learn Python The Hard Way ist ganz gut.
degon
User
Beiträge: 28
Registriert: Montag 14. Juni 2010, 12:03

Hier mal ein zusammenhangloses Beispiel von mir:

Code: Alles auswählen

    def saveImageVertical(self):
        filename = QFileDialog.getSaveFileName(self, "Save Plot", "", "Images (*.png)")
        if not filename.isEmpty():
            if not filename.split('.')[-1] == "png":
                filename = filename + ".png"
            self.path = QFileInfo(filename).path()
            QPixmap.grabWidget(self.ui.qwtPlotVertical).save(filename, 'PNG')
BlackJack

@degon: Kein besonders gutes IMHO. ``if not filename.endswith('.png'):`` ist weniger aufwändig.
degon
User
Beiträge: 28
Registriert: Montag 14. Juni 2010, 12:03

@BlackJack,

danke! Das kannte ich noch nicht ;)
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

@gegon:

Dein Programm würde also bild.PNG.png speichern, nur weil einer nach edem Punkt großgeschrieben hat? ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

KaneWayne hat geschrieben: Dieser wird natürlich in einer Linie ausggeben.

zb. string = "Bot1: Offline Bot2: Online Bot3: Offline"
Wieso "natürlich"? Das hängt ja vom Datenformat ab und nicht von HTTP ;-)

Kannst Du das Format beeinflussen? Also bist Du selber der Datenersteller oder kann man das Format ggf. wählen o.ä.? Wenn ja, könnte man ja gleich ein Format wählen, welches einfacher zu parsen ist oder im Idealfall bereits genau so vorliegt, wie Du ihn brauchst :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo,
willst Du den string nur ausgeben oder auch noch weiter verarbeiten?

Code: Alles auswählen

import re
print re.sub('Offline|Online','$0\n',string)
Grüße
Sirius
BlackJack

@Sirius3: Das fällt auf die Nase wenn einer der Namen 'Online' oder 'Offline' enthält.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@BlackJack: das war aber genau die Frage.
Natürlich müßte man exakt wissen, wie der Eingabestring aufgebaut sein kann um einen passenden
Parser zu schreiben. Wenn man nach dem Beispiel geht, dann kommt Offline und Online nicht als
Name vor.
Deshalb meine Frage, was weiter mit dem Ergebnis passiert. Ohne diese Information ist es reine
Spekulation, welche Lösung die Beste ist, da es 101 verschiedene Möglichkeiten gibt.
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Wobei ich davon ausgehe, dass weder Name noch Status Whitespaces enthalten:

Code: Alles auswählen

>>> a
'Bot1: Offline Bot2: Online Bot3: Offline'
>>> re.findall(r'(\w+): (\w+)', a)
[('Bot1', 'Offline'), ('Bot2', 'Online'), ('Bot3', 'Offline')]
Antworten