/ / Bereinigen Sie die Übersetzungsausgabe nach der XML-Dateiübersetzung - XML, Python-3.x, Übersetzung, docx

Bereinigen Sie die Übersetzungsausgabe nach der XML-Dateiübersetzung - XML, Python-3.x, Übersetzung, docx

Ich muss einige WORD-Dateien (.docx) übersetzen, indem ich die Datei "document.xml" entpacke und sie mit YandexTranslate übersetze.

Mein Code:

import xml.etree.ElementTree as Et
from yandex_translate import YandexTranslate
import zipfile

with zipfile.ZipFile("myfrenchfile.docx") as zf:
zf.extract(r"word/document.xml")

with open("word/document.xml", encoding="utf-8") as f:
tree = Et.parse(f)
root = tree.getroot()

for elem in root.getiterator():
translate = YandexTranslate(
"myyandexkey")
try:
if elem.text:
elem.text = elem.text.replace(elem.text, str(translate.translate(elem.text, "en")))
except AttributeError:
pass

tree.write("document.xml", encoding="utf-8")

Das funktioniert, aber seit ich gezwungen bin, "str" ​​weiterzugehen"translate.translate ()" Damit die Übersetzung funktioniert, bekomme ich eine Ausgabe, die mit «{" lang ":" fr-de "," code ": 200," text ": [" »und ähnlichem gefüllt ist. Ich habe es versucht die Ersetzungsmethode wie in

str(translate.translate(elem.text, "en")).
replace("{"lang": "fr-en", "code": 200, "text": ["", "").
replace(""]}", "").replace("{"lang": "en-en", "code": 200, "text": ["", "").
replace("{"lang": "en-en", "text": ["", "").
replace(""], "code": 200}", "").replace("{"code": 200, "lang": "en-en", "text": ["", "")
.replace("{"code": 200, "lang": "fr-en", "text": ["", "").
replace("{"code": 200, "lang": "de-en", "text": ["", "").
replace("{"lang": "de-en", "code": 200, "text": ["", "")

Wenn ich die Ausgabe drucke, ist es sauber, aber wenn die Datei geschrieben wird, ist es nicht.

Hat jemand eine Lösung, um den Übersetzungstext nur in die neue XML-Datei zu schreiben?

Antworten:

0 für die Antwort № 1

Es funktioniert, indem Sie "str" ​​zu "elem.text" hinzufügen:

try:
if elem.text:
elem.text = elem.text.replace(str(elem.text), str(translate.translate(elem.text, "en")).
replace("{"lang": "fr-en", "code": 200, "text": ["", "").
replace(""]}", "").replace("{"lang": "en-en", "code": 200, "
""text": ["", "").
replace("{"lang": "en-en", "text": ["", "").
replace(""], "code": 200}", "").
replace("{"code": 200, "lang": "en-en", "text": ["", "").
replace("{"code": 200, "lang": "fr-en", "text": ["", "").
replace("{"code": 200, "lang": "de-en", "text": ["", "").
replace("{"lang": "de-en", "code": 200, "text": ["", "").
replace("{"lang": "pl-en", "code": 200, "text": ["", ""))

Nicht wirklich sicher warum ...