Seite 1 von 2

Verfasst: Donnerstag 26. Februar 2009, 15:10
von Leonidas
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.

Verfasst: Donnerstag 26. Februar 2009, 16:13
von christine
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

Verfasst: Samstag 28. Februar 2009, 10:26
von birkenfeld
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.

Verfasst: Samstag 28. Februar 2009, 12:15
von hendrikS
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!!

Verfasst: Samstag 28. Februar 2009, 12:24
von birkenfeld
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?

Verfasst: Samstag 28. Februar 2009, 12:29
von hendrikS
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.

Verfasst: Samstag 28. Februar 2009, 12:42
von kbr
@hendrikS: Du darfst davon ausgehen, dass sich die <Datum>-Tags innerhalb von umgebendem Text befinden. Sonst machen sie keinen Sinn.

Verfasst: Samstag 28. Februar 2009, 12:46
von cofi
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'

Verfasst: Samstag 28. Februar 2009, 12:53
von hendrikS
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.

Verfasst: Samstag 28. Februar 2009, 12:56
von cofi
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.

Verfasst: Samstag 28. Februar 2009, 13:10
von birkenfeld
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...

Verfasst: Samstag 28. Februar 2009, 13:26
von hendrikS
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.

Verfasst: Samstag 28. Februar 2009, 13:31
von birkenfeld
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.

Verfasst: Samstag 28. Februar 2009, 14:43
von snafu
@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``.