当前位置: 首页 > 面试题库 >

如何使用python-docx替换Word文档中的文本并保存

穆远
2023-03-14
问题内容

在同一页面中提到的oodocx模块会将用户引向一个似乎不存在的/ examples文件夹。
我已经阅读了python-docx 0.7.2的文档,以及在上可以找到的所有内容,因此请相信我已经完成了“作业”。

Python是我所知道的唯一语言(初学者+,也许是中级),所以请不要假定对C,Unix,xml等有任何了解。

任务:打开其中包含一行文本的ms-word
2007+文档(为简单起见),然后用其字典值替换该行文本中出现的“字典”中的所有“关键”词。然后关闭文档,使其他所有内容保持不变。

文字行(例如)“我们将在海浪中徘徊。”

from docx import Document

document = Document('/Users/umityalcin/Desktop/Test.docx')

Dictionary = {‘sea’: “ocean”}

sections = document.sections
for section in sections:
    print(section.start_type)

#Now, I would like to navigate, focus on, get to, whatever to the section that has my
#single line of text and execute a find/replace using the dictionary above.
#then save the document in the usual way.

document.save('/Users/umityalcin/Desktop/Test.docx')

我没有在文档中看到允许我执行此操作的任何内容-也许它在那里,但我不明白,因为并不是我所讲的一切都清楚。

我遵循了该站点上的其他建议,并尝试使用模块的早期版本(https://github.com/mikemaccana/python-
docx),该模块应该具有如下“
replace,advReplace之类的方法”: python解释器中的源代码,并在末尾添加以下内容(这是为了避免与已经安装的版本0.7.2冲突):

document = opendocx('/Users/umityalcin/Desktop/Test.docx')
words = document.xpath('//w:r', namespaces=document.nsmap)
for word in words:
    if word in Dictionary.keys():
        print "found it", Dictionary[word]
        document = replace(document, word, Dictionary[word])
savedocx(document, coreprops, appprops, contenttypes, websettings,
    wordrelationships, output, imagefiledict=None)

运行它会产生以下错误消息:

NameError:名称“ coreprops”未定义

也许我正在尝试做一些无法完成的事情,但是如果我错过了一些简单的事情,我将感谢您的帮助。

如果这很重要,我将在OSX 10.9.3上使用Enthought的Canopy的64位版本


问题答案:

当前版本的python-
docx没有search()功能或replace()功能。这些请求被相当频繁地请求,但是一般情况下的实现非常棘手,并且尚未达到积压的顶部。

不过,有几个人已经取得了成功,可以使用已经存在的设施来完成所需的工作。这是一个例子。顺便说一句,它与各节无关:)

for paragraph in document.paragraphs:
    if 'sea' in paragraph.text:
        print paragraph.text
        paragraph.text = 'new text containing ocean'

要同时在表格中搜索,您需要使用类似以下内容的内容:

for table in document.tables:
    for cell in table.cells:
        for paragraph in cell.paragraphs:
            if 'sea' in paragraph.text:
               ...

如果您走这条路,您可能会很快发现复杂性。如果替换段落的整个文本,则将删除任何字符级格式,例如粗体或斜体字或词组。

顺便说一句,@ wnnmaw的答案中的代码适用于python-docx的旧版本,对于0.3.0之后的版本完全不起作用。



 类似资料:
  • 问题内容: 我只有几个Word文件,每个文件都有特定的内容。我想要一个显示给我的片段,或者帮助我弄清楚如何在使用Python库的同时将word文件合并为一个文件。 例如,在pywin32库中,我执行以下操作: 但是我需要在使用Python库而不是 问题答案: 如果您的需求很简单,则可以使用以下方法: 您还可以做其他事情,但这应该可以帮助您入门。 事实证明,在一般情况下,将内容从一个Word文件复制

  • 我认为问题是我创建了一个新的XWPFparage,embeddedPara,它替换了embeddedPara的单词,而不是origin段落。所以我写了一个档案之后,字还是没变。 如何阅读并替换文本框中的单词,而不创建一个新的XWPF段落?

  • 我正试图从word文档中替换文本或合并字段。我发现我可以为此使用docx4j。 我阅读了docx4j的文档和其他一些相关文章,如docx4j-如何用值替换占位符。但是,我似乎不能正确地理解文档和帖子来解决这个问题。

  • 我正在尝试创建一个包含多列的word文档。这样做(而不是使用表)的原因是,数据将跨越多个页面,在添加到新页面之前,我只能用列填充整个页面。 可以用ApachePOI实现吗?谢谢

  • 我已经成功地使用angular而不是“Open/Save”对话框在HTML中显示PDF文件。现在,我被困在试图显示Word文档中。我曾经显示一个Word文档,并成功地完成了显示,但我想限制文件在“新建”选项卡中打开,以便他无法下载

  • 问题内容: 我想使用Python创建Word文档,但是,我想尽可能多地重用现有的文档创建代码。我目前正在使用XSLT生成HTML文件,并以编程方式将其转换为PDF文件。但是,我的客户现在要求以Word(.doc)格式提供同一文档。 到目前为止,我没有太多运气找到该问题的解决方案。有谁知道可以帮助解决此问题的开源库(或 gulp 专有解决方案)? 注意:所有可能的解决方案必须在Linux上运行。我相