Seite 1 von 1

Umlaute aus einem String ersetzen

Verfasst: Mittwoch 27. Oktober 2021, 02:44
von PeterL
Hallo Leute,

Code: Alles auswählen

pgntag=("Äpfel")
pgntag = pgntag.replace("Ä","Ae")
print(pgntag)
Aus einer Zeichenkette mit nur einer Zeile kann ich ohne Probleme Sonderzeichen
äüö ersetzten. Benutze ich einen String indem mehrere Zeilen enthalten sind, in meinem
Beispiel währe das eine Schachpartie.

Code: Alles auswählen

[Event "8th RUS-CHN Summit Men Classical"]
[Site "St Petersburg RUS"]
[Date "2012.07.02"]
[Round "1"]
[White "üMuster Mann"] <<< Hier möcte ich das ü durch ue ersetzten
[Black "Jakovenko,D"]
[Result "1/2-1/2"]
[WhiteTitle "GM"]
[BlackTitle "GM"]
[WhiteElo "2739"]
[BlackElo "2736"]
[ECO "C45"]
[Opening "Scotch"]
[Variation "Potter variation"]
[WhiteFideId "8602883"]
[BlackFideId "4122356"]
[EventDate "2012.07.02"]

1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4.
Jetzt ist es mir nicht mehr möglich

Code: Alles auswählen

[White "üMuster Mann"] 
das ü durch ue
mittels replace zu ersetzten. Kann mir jemand bitte helfen..

Bis die Tage...

Re: Umlaute aus einem String ersetzen

Verfasst: Mittwoch 27. Oktober 2021, 04:51
von Sirius3
Warum ist es dir nicht möglich? Gibt es eine Fehlermeldung? Dann wäre es nett zu erfahren, wie sie lautet, zusammen mit dem Code.
Wenn man raten müsste: Du hast keinen String, sondern eine Liste mit Strings. Dann müsstest Du mittels Schleife replace auf jedes Element einzeln anwenden.

Re: Umlaute aus einem String ersetzen

Verfasst: Mittwoch 27. Oktober 2021, 05:27
von PeterL
Sirius3 hat geschrieben: Mittwoch 27. Oktober 2021, 04:51
Wenn man raten müsste: Du hast keinen String, sondern eine Liste mit Strings. Dann müsstest Du mittels Schleife replace auf jedes Element einzeln anwenden.
Hallo Sirius3,

Ich lese die Schachpartien aus einer großen Datei ein.

Code: Alles auswählen

 for line in pgn_file:
Ich habe in der Pgndatei einigen Spielern das ä ö ü angehängt, und das wollte ich durch
ae usw. ersetzen. Benutze ich Print(line) so erhalte ich diese Ausgabe:

Code: Alles auswählen

[Black "üMustermann"]
Es sieht so aus als ob das ö ä ü nicht richtig eingelesen werden.

Ich habe auch schon:

Code: Alles auswählen

line.encode('utf-8')
benutzt.

In einer Zeichenkette geht das:

Code: Alles auswählen

text = "äi , I'm text"
text.encode('utf-8')
text=text.replace('ä', 'ae')
print(text)
aei  I m text
Bis die Tage...

Re: Umlaute aus einem String ersetzen

Verfasst: Mittwoch 27. Oktober 2021, 06:02
von pillmuncher
@PeterL:

Code: Alles auswählen

text = "äi , I'm text"
text.encode('utf-8')
text=text.replace('ä', 'ae')
print(text)
aei  I m text
Was passiert, wenn du die zweite Zeile weglässt? Was ist der Unterschied?

Re: Umlaute aus einem String ersetzen

Verfasst: Mittwoch 27. Oktober 2021, 06:13
von PeterL
pillmuncher hat geschrieben: Mittwoch 27. Oktober 2021, 06:02 @PeterL:

Code: Alles auswählen

text = "äi , I'm text"
text.encode('utf-8')
text=text.replace('ä', 'ae')
print(text)
aei  I m text
Was passiert, wenn du die zweite Zeile weglässt? Was ist der Unterschied?
Hallo pillmuncher,

Es gibt keinen Unterschied.
Ich wollte nur zeigen das eine Zeichenkette die nur eine Reihe hat, die Umlaute
mit replace ersetzt werden können.

Ich habe das was gefunden.

Code: Alles auswählen

import codecs
with codecs.open('pgn/test.pgn', encoding='utf-8') as f:
    for line in f:
        line= (repr(line))
        print(line)
Die Pgndatei wird mir dann so ausgegeben:

Code: Alles auswählen

'[Event "8th RUS-CHN Summit Men Classical"]\r\n'
'[Site "St Petersburg RUS"]\r\n'
'[Date "2012.07.02"]\r\n'
'[Round "1"]\r\n'
'[White "Nepomniachtchi,I"]\r\n'
'[Black "üMustermann"]\r\n'
Mit allen Sonderzeichen äüö usw...
Später teste ich weiter.

Bis die Tage...

Re: Umlaute aus einem String ersetzen

Verfasst: Mittwoch 27. Oktober 2021, 06:41
von pillmuncher
PeterL hat geschrieben: Mittwoch 27. Oktober 2021, 06:13 Es gibt keinen Unterschied.
Ich wollte nur zeigen das eine Zeichenkette die nur eine Reihe hat, die Umlaute
mit replace ersetzt werden können.
Zeichenketten haben keine Reihen.
PeterL hat geschrieben: Mittwoch 27. Oktober 2021, 06:13 Ich habe das was gefunden.

Code: Alles auswählen

import codecs
with codecs.open('pgn/test.pgn', encoding='utf-8') as f:
    for line in f:
        line= (repr(line))
        print(line)
Was, meinst du, machen die äußeren Klammern hier: (repr(line))? Und was glaubst du, was repr(line) macht? Was hast du dir dabei gedacht, als das hingeschrieben hast?

Und was würde passieren, wenn du statt codecs.open() einfach nur open() verwenden würdest?

Re: Umlaute aus einem String ersetzen

Verfasst: Mittwoch 27. Oktober 2021, 06:51
von PeterL
PeterL hat geschrieben: Mittwoch 27. Oktober 2021, 06:13
Hallo,

ich weis nicht was passiert wenn ich Klammern wegnehme.
Ich habe den Code aus dem Netz. ich habe mich damit noch nicht weiter
beschäftigt.

Ich habe aber ein super Beispiel gefunden was ich auch verstehe.
Ich habe viel im Netz gelesen.

Code: Alles auswählen

with open('pgn/test.pgn', 'r' ,encoding='utf-8') as pgn_file:
    for line in pgn_file:
    line=line.replace('ü','ue')
Alle Sonderzeichen wie öüä werden angezeigt, und ich kann mit replace die
Sonderzeichen ändern in ae usw. Abspeichern geht auch.

Das r am Anfang von Open wahr wohl der Fehler.

Code: Alles auswählen

with open(r'pgn/test.pgn', 'r' ,encoding='utf-8') as pgn_file:
Also ich bin zufrieden...

Bis die Tage...