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.
translation_table = {
"s": "M",
"sc": "fM",
"'": '"',
"[": None,
"]": None
}
teststring = """s soll in M geändert werden. Und sc in fM"""
print(teststring.translate(str.maketrans(translation_table)))
Traceback (most recent call last):
File "/home/fridolin/PycharmProjects/suchen-ersetzen/translation-tabelle-1.py", line 10, in <module>
print(teststring.translate(str.maketrans(translation_table)))
ValueError: string keys in translate table must be of length 1
Process finished with exit code 1
Das haben wir vor über einem Monat mit dir doch schon durchdekliniert. Lies mal deinen alten Thread durch. Da hast du schon mal mit translate angefangen.
Und die Fehlermeldung ist auch SEHR eindeutig. Hast du mal versucht die nachzuvollziehen?
Ich verstehe den Fehler nicht. Ich hatte das erst so interprtiert, dass nur ein Zeichen erlaubt ist. Also habe ich in der Übersetzungsliste Alles auf einen Buchstaben geändert.
translation_table = {
"s": "M",
"c": "f",
"'": '"',
"[": None,
"]": None
}
teststring = """s soll in M geändert werden. Und sc in fM"""
print(teststring.translate(str.maketrans(translation_table)))
Das bringt aber nicht die Lösung. Bitte erläutert mir, was die Kiste will.
fridolin@localhost ~/PycharmProjects/suchen-ersetzen $ less translation-tabelle-1.py
translation_table = {
"s": "M",
"c": "f",
"'": '"',
"[": None,
"]": None
}
fridolin@localhost ~/PycharmProjects/suchen-ersetzen $ python3 translation-tabelle-1.py
Traceback (most recent call last):
File "translation-tabelle-1.py", line 10, in <module>
print(teststring.translate(str.maketrans(translation_table)))
ValueError: string keys in translate table must be of length 1
EDIT: ich habe eine Anpassung unter Linux vorgenommen. Jetzt bekomme ich schonmal die Übersetzungen von einem Zeichen hin. Mit mehreren Zeichen werd ich noch recherchieren müssen ...
Nochmal: wir haben das mit dir schon alles besprochen. Nur weil jetzt 2018 ist, hat sich das nicht geändert. replace ist dein Freund, und wenn du das mehrfach brauchst, dann musst du es mehrfach aufrufen.
michi-monster hat geschrieben:Jetzt bekomme ich schonmal die Übersetzungen von einem Zeichen hin. Mit mehreren Zeichen werd ich noch recherchieren müssen ...
Es geht nicht mit mehreren Zeichen. Das wäre zwar praktisch, ist aber für translate() leider nicht so vorgesehen. Da hilft auch kein weiteres Recherchieren, sofern du nicht von translate() abrücken willst.
ok - vielen Dank. Ich habe jetzt ein wenig gesucht und geforscht in Sachen replace. Die Ausführung selbst ist erfolgreich. Leider habe ich noch keine Möglichkeit gefunden mehrere Ersetzungen in einer Klammer durchzuführen. Ist es überhaupt möglich? Sonst muss ich vielleicht ausführlicher nach Schleifen suchen. Da gibt es allerdings auch verschiedene Varianten. Wenn ihr mir nen Stichpunkt zu einer geeigneten gebt, würd ich mich freuen. Natürlich noch mehr, wenn ich das in str.replace einfügen kann
str = "Round 2: Ch 3. Dc 2 into each stitch. Join with a slst to the 3rd chain. (16 sts)"
print(str.replace("3rd", "3."))
print(str.replace("stitch","Masche"))
print(str.replace("into each","in jede/n"))
print(str.replace("Round","Runde"))
print(str.replace("slst","LM"))
print(str.replace("Dc 2 into each stitch","Jede Masche verdoppeln"))
print(str.replace("sts","M"))
print(str.replace("chain","LM"))
/home/fridolin/PycharmProjects/suchen-ersetzen/venv/bin/python /home/fridolin/PycharmProjects/suchen-ersetzen/replace
Round 2: Ch 3. Dc 2 into each stitch. Join with a slst to the 3. chain. (16 sts)
Round 2: Ch 3. Dc 2 into each Masche. Join with a slst to the 3rd chain. (16 sts)
Round 2: Ch 3. Dc 2 in jede/n stitch. Join with a slst to the 3rd chain. (16 sts)
Runde 2: Ch 3. Dc 2 into each stitch. Join with a slst to the 3rd chain. (16 sts)
Round 2: Ch 3. Dc 2 into each stitch. Join with a LM to the 3rd chain. (16 sts)
Round 2: Ch 3. Jede Masche verdoppeln. Join with a slst to the 3rd chain. (16 sts)
Round 2: Ch 3. Dc 2 into each stitch. Join with a slst to the 3rd chain. (16 M)
Round 2: Ch 3. Dc 2 into each stitch. Join with a slst to the 3rd LM. (16 sts)
Process finished with exit code 0
Mit replace kannst Du eine Zeichenfolge durch eine andere substituieren. Wenn Du dies mehrfach machen möchtest, musst Du replace mehrfach anwenden. Wie Du richtig erkannt hast, käme dafür eine Schleife infrage. Python kennt zwei Arten von Schleifen: for und while. Und jetzt kommt Deine Frage, anhand der Du was lernen kannst: welche solltest Du wählen und warum? Teste es doch einfach mal mit beiden aus, um herauszufinden, worin sie sich unterscheiden. Wenn Du eine definierte Anzahl von Ersetzungen hast, dann wirst Du erkennen, dass eine von beiden genau für solche Fälle konzipiert ist.