Pyton-newbie hat Problem mit regulären Ausdrücken

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.
Antworten
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Hi Leute,

ich bin neu was Python angeht und versuche gerade mit regulären Ausdrücken Daten aus dem öffentlich zugänglichen Handedict (Chinesich-Deutsch Wörterbuch zu extrahieren)


Die Einträge sind wie folgt aufgebaut:

ChinesischeZeichen [wo shi de guo] / dt.Übersetzung

nun möchte ich gerne alle geklammerten Ausdrücke zum testen in eine eigene Datei schreiben.

Hier ist mein Code:

Code: Alles auswählen

#!/usr/bin/env python
# encoding: utf-8
from re import search, sub

from sys import argv
pfad="./handedict.u8"
datei = open( pfad, 'r' ).readlines() #zeilenweise
for zeilen in datei:
  pinyin = search(r'\[(.*)\]', zeilen) #pinyin extrahieren
  pinyin = pinyin.groups()[0]
  print pinyin
  open( datei + '.pinyin', 'w' ).writelines(pinyin)


Leider kommt immer die Fehlermeldung:

Traceback (most recent call last):
  File "dict.py", line 21, in <module>
    pinyin = pinyin.groups()[0]
AttributeError: 'NoneType' object has no attribute 'groups'


Hat jemand eine Idee?
MfG
Timo
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Also sieht für mich so aus, als würde einfach keine "passende" Zeichenkette gefunden, pinyin ist also None.

EDIT:

bin mir nicht sicher, ob das so überhaupt funktioniert funktioniert. Probier mal. ich würde auch das r vor dem String wegnehmen.

Code: Alles auswählen


regex = re.compile('\[(.*)\]')
for zeile in datei:
    pinyin = regex.search(zeile).groups()
    .....

wenn ich falsch liege bitte korrigeren. Weil hab selber so meine probleme mit reg.ex. und so ... ^^
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wie immer bei regexps empfehle ich das Tool Kodos zum probieren und experimentieren!

Desweiteren sollte man nach einem "search" erst einmal prüfen, ob überhaupt ein Treffer vorliegt oder eben einen try-catch Block drum herum basteln!
Antworten