Probleme mit » und « im String finden

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
magmdot
User
Beiträge: 11
Registriert: Mittwoch 19. Februar 2014, 18:07

Hallo

Ich möchte in einer Textdatei nach » und « suchen und beide Symbole durch " ersetzen. Oder zumindest am Ende einen String bekommen, bei dem das ersetzt ist:

Code: Alles auswählen

import codecs 

...


f = codecs.open('beispiel.txt', "r", "utf-8")
s = mmap.mmap(f.fileno(), 0,access=mmap.ACCESS_READ)
q=""
for i in range(0, len(s)):
	if s[i] in set([ '»', '«']):
		q=q+'"'
	else:
		q=q+s[i]
print(q)	
Hier findet er nichts und ersetzt deshalb nichts :(.

wenn ich
q="" duch q=u"" ersetzte, sagt der:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)

Mit anderen Umlauten etc habe ich keine Probleme ....

Danke im für etwaige Hilfe :).
Viele Grüße, magmdot

edit- ich benutze Python2.x


ob, ich hab ein Pearl Script schreiben können, dass das Problem behebt...
Zuletzt geändert von Anonymous am Mittwoch 19. Februar 2014, 19:56, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@magmdot: eine MemoryMap zu verwenden ist in den meisten Fällen zu kompliziert und macht den Code unverständlich. Über den Index einer Liste zu iterieren ist in Python ein Anti-Pattern, weil man gleich direkt über die Elemente iterieren kann. Ein Set für zwei Elemente ist wahrscheinlich langsamer als der "in"-Vergleich in einer 2-elementigen Liste. Auch dieses Set bei jedem for-Schleifenschritt neu zu erzeugen, ist langsam. Stingoperationen sind im Allgemeinen am leichtesten zu verstehen und am schnellsten:

Code: Alles auswählen

q = s.replace('«', '"').replace('»', '"')
magmdot
User
Beiträge: 11
Registriert: Mittwoch 19. Februar 2014, 18:07

danke!

oh man.. jetzt ergibt sich hier ein Riesenproblem. da muss ich morgen mal fragen ...
Antworten