在xml文件转换后清理转换输出

时间:2017-02-12 13:25:35

标签: xml python-3.x translation docx

我需要翻译一些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文件吗?

1 个答案:

答案 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\': [\'', ''))

不确定为什么......