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
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

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: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

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

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

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
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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

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

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

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: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@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``.
Antworten