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.
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

schöner splitten? string.split() Frage

Beitragvon christine » Donnerstag 26. Februar 2009, 11:24

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 :roll:

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
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Donnerstag 26. Februar 2009, 11:59

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
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

Beitragvon christine » Donnerstag 26. Februar 2009, 12:01

vielleicht könnte ich es mit einem regulären Ausdruck in der split Funktion versuchen...

Ich zerteile gerade einen string über entities:
wort.split('&auml;')

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
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

Beitragvon christine » Donnerstag 26. Februar 2009, 12:05

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

Beitragvon cofi » Donnerstag 26. Februar 2009, 12:06

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.
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

Beitragvon christine » Donnerstag 26. Februar 2009, 12:14

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 :wink:

grüße
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

Beitragvon christine » Donnerstag 26. Februar 2009, 12:17

@ manuel:

huch, vor lauter geschreibe habe ich garnicht gesehen wie genial deine Lösung ist :oops:

cool, Dankeschön
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Donnerstag 26. Februar 2009, 13:37

christine hat geschrieben:@ manuel:

huch, vor lauter geschreibe habe ich garnicht gesehen wie genial deine Lösung ist :oops:

cool, Dankeschön

8)

Naja, sagen wir fast. Folgendes ist besser, da performanter:

Code: Alles auswählen

re.findall("<DATUM>(\d{4}).*?</DATUM>", text)

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

Beitragvon hendrikS » Donnerstag 26. Februar 2009, 13:45

Vielleicht mal so was probieren:

Code: Alles auswählen

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


Fuer so was reguläre Ausdruecke ist n'bisschen mit dem Schinken nach der Wurst geschmissen.
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

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

@ manuel:

ah ja, dann werde ich das jetzt gleich nochmal verbessern

danke :)
Zuletzt geändert von christine am Donnerstag 26. Februar 2009, 14:05, insgesamt 1-mal geändert.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Donnerstag 26. Februar 2009, 14:00

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

Beitragvon cofi » Donnerstag 26. Februar 2009, 14:10

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/
christine
User
Beiträge: 31
Registriert: Dienstag 24. Februar 2009, 10:03

Beitragvon christine » Donnerstag 26. Februar 2009, 14:43

danke cofi,
werds mir mal durchsehen.
:)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 26. Februar 2009, 14:54

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.
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, 15:04

@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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder