Kyrillisch suchen und 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
Benutzeravatar
michi-monster
User
Beiträge: 48
Registriert: Donnerstag 7. Dezember 2017, 18:30
Kontaktdaten:

Hallo, ich habe ein Programm mit dem ich bestimmte Sachen suchen und ersetzen will. In Englisch funktioniert es. In Russisch wird die Datei nur überschrieben. Es wird die Datei leer angezeigt nach Ausführung des Scriptes.

Code: Alles auswählen

#/usr/bin/pyhton3
import fileinput
import re
datei=fileinput.FileInput("ru-txt.txt",inplace=True,backup=".bak")
for line in datei:
        line=re.sub(r"Инструкции","Anleitung",line)
        line=re.sub(r"белый","weiss",line)
        line=re.sub(r"чернить","schwarz",line) 
        line=re.sub(r"ряд","Runde",line)
        line=re.sub(r"сбн","fM",line)
Der Zeichencode ist auf dem OS installiert.

Code: Alles auswählen

michi@michi-debian:~/python$ locale -a
C
C.UTF-8
de_DE
de_DE@euro
de_DE.iso88591
de_DE.iso885915@euro
de_DE.utf8
deutsch
en_GB
en_GB.iso88591
en_GB.utf8
german
POSIX
ru_RU.utf8
michi@michi-debian:~/python$ 
Was kann ich tun bzw. wo liegt das Prob?
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

Das hat nichts mit russisch oder englisch zu tun, sondern, daran, dass fileinput so funktioniert, wie Du denkst.
Das Modul biegt stdout um, und ist daher sehr speziell.

Warum willst Du konstanten Text per regulärem Ausdruck ersetzen? Sowas würde man auch mit einer entsprechenden Datenstruktur machen, wie Dir auch schon vor einiger Zeit nahegelegt wurde.

Es heißt python3 und nicht pyhton3.

Code: Alles auswählen

#!/usr/bin/python3
import re

REPLACEMENTS = [
    ("Инструкции", "Anleitung"),
    ("белый", "weiss"),
    ("чернить", "schwarz"),
    ("ряд", "Runde"),
    ("сбн", "fM"),
]

def main():
    with open("ru-txt.txt", encoding="utf8") as input:
        with open("ru-txt.out", encoding="utf8", mode="w") as output:
            for line in input
                for text, replacement in REPLACEMENTS:
                    line = line.replace(text, replacement)
                output.write(line)

if __name__ == "__main__";
    main()
Benutzeravatar
michi-monster
User
Beiträge: 48
Registriert: Donnerstag 7. Dezember 2017, 18:30
Kontaktdaten:

Ich bitte um Nachsicht: ich bin noch ziemliche Anfängerin. Das Beispiel habe ich im Netz gefunden und eben nur angepasst. Als es in Englisch funktioniterte war ich happy. Najut. Ich muss nochmal recherchieren und russisch einfacher anfangen.
Benutzeravatar
michi-monster
User
Beiträge: 48
Registriert: Donnerstag 7. Dezember 2017, 18:30
Kontaktdaten:

Über nem replace funktioniert es. Da wird das kyrillisch auch angezeigt. ok, ich werd nochmal fummeln :-)

michi@michi-debian:~$ cd python/
michi@michi-debian:~/python$ nano -w versuch.py
michi@michi-debian:~/python$ python versuch.py
круглый
michi@michi-debian:~/python$ nano -w versuch.py
michi@michi-debian:~/python$ python versuch.py
круглый
Übersetzter Text: Runde
michi@michi-debian:~/python$
LeSchakal
User
Beiträge: 23
Registriert: Dienstag 5. Februar 2019, 23:40

Code: Alles auswählen

REPLACEMENTS = [
    ("Инструкции", "Anleitung"),
    ("белый", "weiss"),
    ("чернить", "schwarz"),
    ("ряд", "Runde"),
    ("сбн", "fM"),
]
Nur eine kleine Anmerkung, da ich nicht weiß, wie gut du Russisch kannst:

"чернить" bedeutet "(an)schwärzen"
"чёрный" (bzw. черный, da die Punkterln meist nicht geschrieben werden) wäre "schwarz".
Antworten