我需要翻译一些WORD文件(.docx),我是通过提取'document.xml'文件并使用YandexTranslate进行翻译来实现的。
我的代码:
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')
这样可行,但由于我被迫在'translate.translate()'上传递'str'以使翻译工作,我得到一个填充«{'lang':'fr-en','code'的输出:200,'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\': [\'', '')
如果我打印输出,它很干净,但是当写入文件时它不是。
有人有解决方案只将翻译文本写入新的xml文件吗?
答案 0 :(得分:0)
通过将'str'添加到'elem.text'来实现它的工作:
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\': [\'', ''))
不确定为什么......