Seite 1 von 2
schöner splitten? string.split() Frage
Verfasst: Donnerstag 26. Februar 2009, 11:24
von christine
Hallo Zusammen,
Bitte nochmal um eine "verschönerungs" Hilfe.
Ich lese ein Datum der Form aus: <DATUM>2008-08-08</DATUM>
Und dann möchte ich nur noch die Jahreszahl erhalten.
Das mache ich über split().
Siehe unten
Kann man das auch schöner "splitten" zum Beispliel alles auf einmal ?
Ich hab es versucht mit der Form: split('x'+'y').
Das hat nicht fuktioniert.
mercy, gruß, christine
Code: Alles auswählen
liste_datum = re.findall(r"<DATUM>.+</DATUM>",text)
for abfrageErgebnis in liste_datum:
abfrageErgebnis = abfrageErgebnis.split('>')
abfrageErgebnis = abfrageErgebnis[1].split('<')
abfrageErgebnis = abfrageErgebnis[0]#gibt das Datum in diese Form aus: 2008-08-08
abfrageErgebnis = abfrageErgebnis.split('-')
abfrageErgebnis = abfrageErgebnis[0]#gibt das Datum in diese Form aus: 2008
Verfasst: Donnerstag 26. Februar 2009, 11:59
von helduel
Moin christine,
wenn du eh schon Reguläre Ausdrücke verwendest, dann lasst dir die Jahreszahl direkt zurückgeben:
Code: Alles auswählen
import re
text = """<DATUM>2008-08-08</DATUM>
<DATUM>2009-09-09</DATUM>"""
re.findall("<DATUM>(\d{4}).*</DATUM>", text)
# ['2008', '2009']
Gruß,
Manuel
Verfasst: Donnerstag 26. Februar 2009, 12:01
von christine
vielleicht könnte ich es mit einem regulären Ausdruck in der split Funktion versuchen...
Ich zerteile gerade einen string über entities:
wort.split('ä')
Das funktioniert.
Wenn ich jetzt statt auml; einen regulären Ausdruck einfüge, könnte es klappen.
Ich werde es nacher mal versuchen..
Bis dann, christine
Verfasst: Donnerstag 26. Februar 2009, 12:05
von christine
Hey Manuel,
hat sich gerade überschnitten.
Deine Lösung sieht auf jedenfall besser aus. Werde es so umsetzen.
Ich bin noch nicht so "drin" in der ganzen Geschichte und mache viele Sachen wohl etwas umständlich, komme aber noch nicht darauf wie es einfacher geht.
Also mercy schonmal
Verfasst: Donnerstag 26. Februar 2009, 12:06
von cofi
Mich beschleicht gerade das Gefühl, dass du eigentlich XML/HTML bearbeiten willst ...
Wenn dem so ist, benutze lieber Libs wie ElementTree/lxml.xml bzw lxml.html/BeatifulSoup. Das macht den Code bei weitem stabiler gegenüber RegExp.
Verfasst: Donnerstag 26. Februar 2009, 12:14
von christine
hi cofi,
ich möchte sgml Dateien durchsuchen und bestimmte Werte, so sie denn vorhanden sind, ausgeben. Und die Dateien dann dementsprechend sortieren.
Mit ElementTree kenn ich mich nicht aus.
Ich habe schonmal einen versuch gestartet das modul minidom (oder ähnlich..?!) zu benutzen.
Bin aber auch nicht weit gekommen.
Über einen Link auf eine schöne Doku würde ich mich freuen
grüße
Verfasst: Donnerstag 26. Februar 2009, 12:17
von christine
@ manuel:
huch, vor lauter geschreibe habe ich garnicht gesehen wie genial deine Lösung ist
cool, Dankeschön
Verfasst: Donnerstag 26. Februar 2009, 13:37
von helduel
christine hat geschrieben:@ manuel:
huch, vor lauter geschreibe habe ich garnicht gesehen wie genial deine Lösung ist
cool, Dankeschön
Naja, sagen wir fast. Folgendes ist besser, da performanter:
Das Problem ist, dass ".*" greedy ist und immer sowie wie möglich matchen will. D. h., nach der ersten Jahreszahl sammelt ".*" alles ein, bis hin zum letzten "</DATUM>". Das macht er dann für jedes DATUM-Tag. Das ist natürlich unsinn. Wenn man aber ".*?" angibt, dann versucht er so wenig wie möglich zu matchen; bleibt also inerhalb der DATUM-Tags.
Gruß,
Manuel
Verfasst: Donnerstag 26. Februar 2009, 13:45
von hendrikS
Vielleicht mal so was probieren:
Fuer so was reguläre Ausdruecke ist n'bisschen mit dem Schinken nach der Wurst geschmissen.
Verfasst: Donnerstag 26. Februar 2009, 13:57
von christine
@ manuel:
ah ja, dann werde ich das jetzt gleich nochmal verbessern
danke

Verfasst: Donnerstag 26. Februar 2009, 14:00
von helduel
hendrikS hat geschrieben:Fuer so was reguläre Ausdruecke ist n'bisschen mit dem Schinken nach der Wurst geschmissen.
Nö. Genau für sowas sind Regexes da. Außerdem sieht man der Regex hier deutlich an, was geliefert wird und findet zudem alle Daten.
Verfasst: Donnerstag 26. Februar 2009, 14:10
von cofi
Na SGML und XML sind ja verwandt

Dokumentation zu Etree:
http://docs.python.org/library/xml.etre ... ttree.html
Eventuell wirst du aber mit lxml glücklicher:
http://codespeak.net/lxml/
Verfasst: Donnerstag 26. Februar 2009, 14:43
von christine
danke cofi,
werds mir mal durchsehen.

Verfasst: Donnerstag 26. Februar 2009, 14:54
von Leonidas
cofi hat geschrieben:Na SGML und XML sind ja verwandt

Eher weniger. Das was gültiges SGML ist muss nichtmal valides XML sein. Ein einfaches Beispiel ist etwa das aus HTML 4 bekannte <IMG>-Tag, das in XHTML <img /> lauten
muss. Und da gibt es noch Reihenweise Unterschiede, soweit dass kein einziger Browser einen SGML-Parser hat und ich bir gar nicht sicher bin ob es Parser gibt, die überhaupt alles was SGML erlaubt, parsen können.
Verfasst: Donnerstag 26. Februar 2009, 15:04
von christine
@Leonidas
deshalb bin ich mir auch nicht so sicher ob ich
die Libs und module von XML verwenden kann. Aber in die Doku reinschauen lohnt sich sicher, vielleicht steht da auch was zu sgml drin
XML ist ja eine Untermenge von SGML.
SGML war auch zuerst da und XML /HTML wurden daraus entwickelt.
soweit mein Wissen.
Grüße,
Christine
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:
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:
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:
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?