schlüsselbegriffe in text finden und per schleife durchgehen

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.
mondschein
User
Beiträge: 52
Registriert: Dienstag 11. März 2008, 16:35

schlüsselbegriffe in text finden und per schleife durchgehen

Beitragvon mondschein » Freitag 23. Mai 2008, 10:58

Hallo alle miteinander,
ich komm hier einfach nicht weiter ich glaub ich hab nen grundlegenden fehler gemacht, und hoffe das ihr mir evtl. ein paar Tipps gebt. Also ich hab einen Text:

bla bla bla
<gallery>
Image:Sca_c.gif|[[M63]]
Image:Mona Lisa.jpg|[[Mona Lisa]]
Image:Sca_c.GIF|[[M63]]
Image:Truite arc-en-ciel.jpg|Eine [[Forelle ]]
</gallery>
bla bla bla


So nun will ich den <gallery> Teil finden um dann pro "Image" eine Schleife zu durchlaufen.

Code: Alles auswählen

def doGallery(text):
   itext = text
   path  = "images"
   temp = re.compile('<gallery>(.*?)</gallery>', re.DOTALL)
   match = temp.findall(text)

   for gal in match:
      temp2  = re.compile('Image:(.*?)', re.DOTALL)
      match = temp2.findall(text)
      for im in match:
   


So das is der obere Teil des Programms, aber irgendwie findet er nix. Warum?
:shock:

Danke für jeden Tipp
mondschein
User
Beiträge: 52
Registriert: Dienstag 11. März 2008, 16:35

Beitragvon mondschein » Freitag 23. Mai 2008, 11:51

Ich hab noch eine Frage:

Wie mach ich das, dass er praktisch wenn er Image: gefunden hat alles was dahintersteht bis das nächste Image. anfängt, speichert?
Wil der Ausdruck wird ja immer so aussehen, dass das ganze Konstrukt von <galler> eingerahmt ist und dadrinn sind lauter image: bla.jpg Image: bla.gif etc.
Irgendwie hab ich nen Denkfehler :-(
Weil so wie ich es hab findet er alle 4 Image: aber die Liste enthält 4 leere Einträge
:cry:
Danke für jeden Hinweis
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Freitag 23. Mai 2008, 12:08

Wenn es um XML geht, würde ich nicht per Hand suchen. Schau doch mal in die Doku und in die Forensuche. Da finden sich passende Module, die dir die Arbeit abnehmen.
mondschein
User
Beiträge: 52
Registriert: Dienstag 11. März 2008, 16:35

Beitragvon mondschein » Freitag 23. Mai 2008, 12:16

Ich versteh nicht genau wie du das meinst...Klar zum suchen arbeite ich mit Regulären Ausdrücken, aber XML? Ich versteh nicht wo der Bezug zwischen meinen Programm und XML liegt außer das man in Python und XML Reguläre Ausdrücke verwendet...
An sich arbeite ich nicht mit XML aber mit Wiki-Text, weil ich eine Erweiterung für ein Wikitool schreibe um den Wiki Text ind Latex umzuwandeln/ übersetzen und das ganze dann in PDF umzuwandeln.
kannst du nochmal genau erklären was du meinst?

Danke
Mondschein
BlackJack

Beitragvon BlackJack » Freitag 23. Mai 2008, 14:36

@mondschein: Es wird etwas gefunden, und zwar leere Zeichenketten. In dem Ausdruck 'Image:(.*?)' suchst Du 'Image:' gefolgt von 0 mal oder mehrfach irgendeinem Zeichen. Das trifft halt auch auf die leere Zeichenkette zu, da wird irgendein Zeichen 0 mal wiederholt. :-)

Du musst das Fragezeichen raus nehmen, damit sich `re` nicht mit dem *kürzesten* Treffer zufrieden gibt und dann natürlich auch das `re.DOTALL` weglassen, damit der Match am Zeilenende aufhört.

Etwas sprechendere Namen wären nicht schlecht. Insbesondere sollte man nicht verschiedenen Sachen den gleichen nichtssagenden Namen (`match`) geben.

Wobei man das im gezeigten Quelltext auch ganz gut zusammen streichen kann:

Code: Alles auswählen

def doGallery(text):
    itext = text
    path = 'images'

    for gallery in re.findall(text, '<gallery>(.*?)</gallery>', re.DOTALL):
        for image in re.findall(text, 'Image:(.*)'):
            pass


Auf XML ist EyDu wohl wegen dem '<gallery>'-"Tag" gekommen.
mondschein
User
Beiträge: 52
Registriert: Dienstag 11. März 2008, 16:35

Beitragvon mondschein » Freitag 23. Mai 2008, 14:54

for gallery in re.findall(text, '<gallery>(.*?)</gallery>', re.DOTALL):
TypeError: findall() takes exactly 2 arguments (3 given)


Ich glaub ich hab nen püython versionsproblem, oder?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Freitag 23. Mai 2008, 15:02

[code=]New in version 1.5.2. Changed in version 2.4: Added the optional flags argument.[/code]MfG
HWK
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 23. Mai 2008, 15:26

BlackJack hat geschrieben:Wobei man das im gezeigten Quelltext auch ganz gut zusammen streichen kann:

Code: Alles auswählen

def doGallery(text):
    itext = text
    path = 'images'

    for gallery in re.findall(text, '<gallery>(.*?)</gallery>', re.DOTALL):
        for image in re.findall(text, 'Image:(.*)'):
            pass

Müsste da in Zeile 6 nicht in ``gallery`` gesucht werden, statt in ``text``? Ich sehe dass der Quelltext vom OP übernommen ist, aber das scheint mir recht sinnlos zu sein, den Text mehrmals zu durchsuchen, wenn ``<gallery />`` mehrmals vorkommt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mondschein
User
Beiträge: 52
Registriert: Dienstag 11. März 2008, 16:35

Beitragvon mondschein » Freitag 23. Mai 2008, 16:35

super danke...das is danna uch der grund warum er die schleife zu oft durchläuft...

danke dnake :oops:
BlackJack

Beitragvon BlackJack » Samstag 24. Mai 2008, 07:59

@Leonidas: Jup, da habe ich nicht aufgepasst. Äh, ich meine natürlich ich wollte sehen ob alle anderen aufpassen und den absichtlich eingebauten Fehler bemerken… ;-)
mondschein
User
Beiträge: 52
Registriert: Dienstag 11. März 2008, 16:35

Rcihtiger Suchbegriff?

Beitragvon mondschein » Dienstag 27. Mai 2008, 09:27

Hallo,
danke nochmal für eure Hilfe, hab mein erstes Porblem nun bewältigt udn hängt jetzt mal wieder an nemwahrschienlich minimalen Fehler...
Ich habe ja:
Image:Sca_c.gif|[[M63]]
Image:Mona_Lisa.jpg|[[Mona Lisa]]
Image:Sca_c.GIF|[[M63]]
Image:Truite_arc-en-ciel.jpg|Eine [[Forelle ]]

Nun versuch ich schon die ganze Zeit praktisch den Untertitel der Bilder:
|[[M63]]
|[[Mona Lisa]]
|[[M63]]
|Eine [[Forelle ]]

zu finden. Aber meine Suchfunktion ist da irgendwie falsch bzw. Löschfunktion.

Code: Alles auswählen

titel = re.sub(r'\|\[\[.*\]\]' , '', im)

Das Programm löscht gar nichts und mir fällt auch grad auf das ich gar nciht den Fall abgedeckt hab, falls nach dem | Text ohne [[ kommt. :cry:

Danke für jeden Tipp.
mondschein
User
Beiträge: 52
Registriert: Dienstag 11. März 2008, 16:35

arrays?

Beitragvon mondschein » Dienstag 27. Mai 2008, 10:11

Hallo
ich hab nochmal ne Frage:
Ich wollt nen array anlegen und hab auch ein Tutorial (http://pentangle.net/python/handbook/node39.html) dazu gefunden, aber irgendwie klappt das mit den zero nicht, er sagt immer das es keine globale variable zero gibt.
Ich hab doch bestimmt vergessen das entsprechende Modul zu importieren, oder? Kann mir jemand sagen wie das heißt?

Danke :)
OldBoy
User
Beiträge: 34
Registriert: Samstag 12. Januar 2008, 20:39

Beitragvon OldBoy » Dienstag 27. Mai 2008, 10:34

Wenn du das Tutorial richtig liest, findest du in Kapitel 3.10 den Hinweis darauf, dass die Bibliothek Numeric verwendet wird. Der Nachfolger von Numeric ist Numpy.

Gruss

OldBoy
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 27. Mai 2008, 10:44

Also bei mir funktioniert der reguläre Ausdruck, ich hätte ihn aber non-greedy gemacht. Und natürlich deckt er nur den Fall ab, wenn zwischen ``|`` und ``[[`` nichts steht.

Ansonsten finde ich es komisch, was du da für ein Dokument rauskramst. Willst du mit Vektoren rechnen? Die Dokumentation die du da hast ist nämlich an Physiker gerichtet.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mondschein
User
Beiträge: 52
Registriert: Dienstag 11. März 2008, 16:35

Beitragvon mondschein » Dienstag 27. Mai 2008, 10:48

:cry: hab ich auch schon gemerkt, hab jetzt http://docs.python.org/lib/module-array.html
aber irgendwie mit den arrays krige ich net so richtig hin, kannst du mir nen bsp. für die erstellung eines 2 dimensionalen arrays geben....kenne mich mit python nciht so aus, hab halt java gehabt und versuch nun schon die ganze zeit nen array hinzukriegen :? und es geht net, bin momentan soweit:

name_titel = array.array("B", range(length))

aber ehrlich gesagt versteh ich überhaupt net wozu die ganzen buchstaben da sind :( und der is ja dann eigentlich nur eindimensional... kannst du mir helfen? weil normal macht man ja nen array irgendwie in die Richtung
bla= array (8,8) oder so also für 2-d...

danke für jeden tipp

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder