schöner splitten? string.split() Frage

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 26. Februar 2009, 15:10

Python 2.x hat die sgmllib, aber man sollte da keinen vollständigen Parser erwarten.

Wenn du mit XML-Tools hinkommst ist das in Ordnung, ansonsten kannst du entweder reguläre Ausdrücke weiterverwenden (wenn es nicht allzu komplex ist, was du da vorhast) oder einen eigenen SGML-Parser schreiben bzw. gucken ob nicht jemand sowas schon gemacht hat. Ist allerdings dann aufwendiger - kein Wunder das SGML am aussterben ist.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

Beitragvon christine » Donnerstag 26. Februar 2009, 16:13

ah, ok, danke für die lib!
ja, klar ich schreibe mal kurz einen Parser ;)
da muss ich glaub erst noch ein bischen länger hier surfen.

grüße,
Christine
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Samstag 28. Februar 2009, 10:26

hendrikS hat geschrieben:Vielleicht mal so was probieren:

Code: Alles auswählen

string.strip("</DATUM>").split('-')[0]


Das sieht mir sehr nach einem Missbrauch des Arguments von strip() aus.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Samstag 28. Februar 2009, 12:15

birkenfeld hat geschrieben:
hendrikS hat geschrieben:Vielleicht mal so was probieren:

Code: Alles auswählen

string.strip("</DATUM>").split('-')[0]


Das sieht mir sehr nach einem Missbrauch des Arguments von strip() aus.


Bitte mal die Doku lesen, bevor Du so was schreibst!!
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Samstag 28. Februar 2009, 12:24

hendrikS hat geschrieben:
birkenfeld hat geschrieben:
hendrikS hat geschrieben:Vielleicht mal so was probieren:

Code: Alles auswählen

string.strip("</DATUM>").split('-')[0]


Das sieht mir sehr nach einem Missbrauch des Arguments von strip() aus.


Bitte mal die Doku lesen, bevor Du so was schreibst!!

Du bist witzig, weißt du das?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Samstag 28. Februar 2009, 12:29

birkenfeld hat geschrieben:
hendrikS hat geschrieben:
birkenfeld hat geschrieben:
hendrikS hat geschrieben:Vielleicht mal so was probieren:

Code: Alles auswählen

string.strip("</DATUM>").split('-')[0]


Das sieht mir sehr nach einem Missbrauch des Arguments von strip() aus.


Bitte mal die Doku lesen, bevor Du so was schreibst!!

Du bist witzig, weißt du das?


Ja, ich hatte mich halt gefragt, was daran Mißbrauch ist und das Du nicht weißt, wie strip anzuwenden ist.
Benutzeravatar
kbr
User
Beiträge: 775
Registriert: Mittwoch 15. Oktober 2008, 09:27
Wohnort: Düsseldorf

Beitragvon kbr » Samstag 28. Februar 2009, 12:42

@hendrikS: Du darfst davon ausgehen, dass sich die <Datum>-Tags innerhalb von umgebendem Text befinden. Sonst machen sie keinen Sinn.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Samstag 28. Februar 2009, 12:46

Ich denke Birkenfeld wil darauf raus, dass der Ansatz fiese Seiteneffekte hat, wie zb. auch das erste DATUM rauszuschmeissen ... neben allen anderen einzelnen chars die so darin vorkommen ;)

Code: Alles auswählen

In [3]: teststring = "<DATUM>2008-08-08</DATUM>"

In [4]: teststring.strip("</DATUM>")
Out[4]: '2008-08-08'
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Samstag 28. Februar 2009, 12:53

cofi hat geschrieben:Ich denke Birkenfeld wil darauf raus, dass der Ansatz fiese Seiteneffekte hat, wie zb. auch das erste DATUM rauszuschmeissen ... neben allen anderen einzelnen chars die so darin vorkommen ;)

Code: Alles auswählen

In [3]: teststring = "<DATUM>2008-08-08</DATUM>"

In [4]: teststring.strip("</DATUM>")
Out[4]: '2008-08-08'


:roll: Heh? Schon mal die Problemstellung gelesen? Es ist gerade der Sinn sowohl "<DATUM>" als auch "</DATUM>" zu eliminieren.
Ganz schön merkwürdige Postings heute.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Samstag 28. Februar 2009, 12:56

Der Punkt ist aber, dass das auch "<" "/" "D" "A" "T" "U" "M" usw. aus dem Text schmeisst. Da es hier um Fliesstext(SGML) geht ist das alles andere als brauchbar.
Und die Problemstellung war an das Datum zu kommen, nicht Buchstaben herauszuschmeissen.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Samstag 28. Februar 2009, 13:10

Ich wollte darauf hinaus, dass dieser Ansatz schnell Probleme macht, wenn innerhalb des Tags plötzlich andere Dinge stehen. Und dass in diesem Fall die Regex wesentlich besser erkennen lässt, was eigentlich bezweckt wird.

Und dass ich die Doku zu strip() lesen soll, ist lustig, weil ich sie selbst (um-)geschrieben habe...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Samstag 28. Februar 2009, 13:26

Ja, was soll ich darauf antworten? Die Aufgabenstellung von christine ist glockenklar. Für diese funktioniert der Code. Auch eine Regexp kann nicht 100% funktionieren, wenn sich das Format auf einmal ändert.
Wenn Du an der Funktion sogar mitgeschrieben hast, wundert mich Dein erstes posting um so mehr. Solche Postings sind eher suboptimal und nicht besonders klug. Schreib doch besser mal was daran Mißbrauch ist.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Samstag 28. Februar 2009, 13:31

Eine Regexp kann zu 100% den Inhalt dieses Tags herausholen (selbst wenn innen ungültiges XML stände).

Mein erstes Posting war zugegebenermaßen etwas kurz; ich möchte halt lieber zum Denken anregen als alles vorkauen.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
snafu
User
Beiträge: 5387
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Samstag 28. Februar 2009, 14:43

@hendrikS: Ein Beispiel wo dein Code nicht funktioniert:

Code: Alles auswählen

In [17]: s = '<DAT><EVENT>a hyphenated-event</EVENT><DATUM>2008-08-08</DATUM></DAT>'

In [18]: s.strip('</DATUM>').split('-')[0]
Out[18]: 'EVENT>a hyphenated'


Und ich denke mal, sooo konstruiert ist es jetzt nicht unbedingt, dass jemand alle Veranstaltungen von 2008 aus einer Auflistung von 2003-2008 filtern will (oder sowas in der Art). Mag sein, dass das für christine nicht relevant ist, aber in nem halben Jahr will das jemand, stößt auf diesen Thread und wundert sich, dass es nicht klappt. ;) Wahlweise gehen auch Punkte im Datum in Kombination mit ``3. Sommerfest Hintertupfingen``.
shcol (Repo | Doc | PyPi)

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]