Umlaute aus einem String ersetzen

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
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

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...
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

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...
Benutzeravatar
pillmuncher
User
Beiträge: 1530
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@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?
In specifications, Murphy's Law supersedes Ohm's.
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

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...
Benutzeravatar
pillmuncher
User
Beiträge: 1530
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

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?
In specifications, Murphy's Law supersedes Ohm's.
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

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...
Antworten