Python 3.x 使用python-Docx写入Docx可以消除样式化吗?

Python 3.x 使用python-Docx写入Docx可以消除样式化吗?,python-3.x,python-docx,Python 3.x,Python Docx,我正在写一个机器翻译代码。我正在从docx文件获取输入。我能够提取文件的内容,但在翻译后,当我回写同一个docx文件时,它要么以纯文本格式写入,要么只是删除字体和段落样式 是否有一种方法可以用与文件中已有的相同字体写回docx文件?比如跟踪文件的XMl结构 我有100多个段落,通过代码手动将样式应用于每个段落是一项漫长的任务,因此有一个模块首先提供这样的xml结构 <w:body> <w:p> <w:pPr> <w:pSt

我正在写一个机器翻译代码。我正在从docx文件获取输入。我能够提取文件的内容,但在翻译后,当我回写同一个docx文件时,它要么以纯文本格式写入,要么只是删除字体和段落样式

是否有一种方法可以用与文件中已有的相同字体写回docx文件?比如跟踪文件的XMl结构

我有100多个段落,通过代码手动将样式应用于每个段落是一项漫长的任务,因此有一个模块首先提供这样的xml结构

    <w:body>
    <w:p>
    <w:pPr>
    <w:pStyle w:val="Heading1"/>
    </w:pPr>
    </w:pPr>
    <w:r><w:t>Introduction</w:t></w:r>
    </w:p>
    <w:p>
    <w:r><w:t xml:space="preserve">Please fill your name in the space 
     provided</w:t></w:r>
    </w:p>
    <w:p>
    <w:pPr>

介绍
请在空白处填上你的名字
假如
在回写时,它应该添加到当前位置

    <w:r><w:t xml:space="preserve"> Please fill your name in the space 
    provided  </w:t></w:r>
请在空格中填写您的姓名
假如
例如:

    <w:r><w:t xml:space="preserve"> Bitte füllen Sie bitte Ihren Namen aus  
    </w:t></w:r>
bite füllen Sie bite Ihren Namen aus

因此,这种风格得以保留,旧句子被新句子取代。

这是一项艰苦的工作。您需要迭代段落中的运行文本,而不仅仅是段落文本

for paragraph in document.paragraphs:
    for run in paragraph.runs:
         #print run.text
         #print run._element.xml
         run.text = 'translated text'
请注意,段落根据样式和其他可能性分为几段。 因此,例如:

一把舒适的新椅子


将由至少4次运行组成…

跟踪XML结构实际上正是python docx所做的。你把事情搞砸了,却没有向我们展示。在你的问题中添加生成你描述的结果的最少Python代码。如果超过20行,则不是最小代码:)请查看文档中的此页,以了解有关字符格式的更多信息,以及如何在运行级别指定字符格式。您需要从源代码中读取字体详细信息,并将其应用于目标运行,以实现您的要求。