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

2023-12-06

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

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)应该有“像替换,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 上使用 64 位版本的 Enthought's Canopy


UPDATE:有几个段落级函数可以很好地完成此任务,可以在 GitHub 网站上找到python-docx.

  1. 这个将用替换字符串替换正则表达式匹配。替换字符串的显示格式与匹配字符串的第一个字符相同。
  2. 这个将isolate a run这样可以将某些格式应用于该单词或短语,例如突出显示文本中每次出现的“foobar”,或者将其设置为粗体或以更大的字体显示。

当前版本的 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 row in table.rows:
        for cell in row.cells:
            for paragraph in cell.paragraphs:
                if 'sea' in paragraph.text:
                    paragraph.text = paragraph.text.replace("sea", "ocean")

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

顺便说一句,@wnnmaw 的答案中的代码适用于旧版本的 python-docx,并且根本不适用于 0.3.0 之后的版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Python OverflowError:数学范围错误[重复]

    这个问题在这里已经有答案了 当我尝试这个计算时 出现溢出错误 output math exp 1391 12694245 100 我知道发生这种情况是因为使用的数字 超出了双精度数的范围 但有什么方法可以解决这个问题并获得输出值 有人可以帮
  • 以 str.format 切片字符串

    我想实现以下目标str format x y 1234 5678 print str x 2 str y 2 我能够做到这一点的唯一方法是 print 0 1 format str x 2 str y 2 现在 这是一个例子 我真正拥有的是
  • 在 Django 中使用 prefetch_lated 连接 ManyToMany 字段

    我可能遗漏了一些明显的东西 但我在连接 ManyToMany 字段以在 Django 应用程序中工作时遇到问题 我有两个模型 class Area models Model name CharField class Role models
  • MySql 查询在选择中将 NULL 替换为空字符串

    如何用空字符串替换 select 中的 NULL 值 输出 NULL 值看起来不太专业 这是非常不寻常的 根据我的语法 我希望它能够工作 我希望能得到一个解释 为什么没有 select CASE prereq WHEN prereq IS
  • Huggingface 变形金刚模块未被 anaconda 识别

    我正在使用 Anaconda python 3 7 Windows 10 我尝试通过安装变压器https huggingface co transformers https huggingface co transformers 在我的环境
  • 如何将 UPX 与 pyinstaller 一起使用?

    如何将 UPX 与 pyinstaller 一起使用 我正在关注文档 我已经下载了UPX 我的文件如下所示 import csv import selenium import pandas print Hello 然后我运行 pyinsta
  • RichTextbox SelectionStart 返回错误的索引

    我需要向用户显示光标上文本的选择开始和长度 就像在 notepad exe 中一样 选择长度没有问题 因为 Richtextbox 支持带有开始和结束的选择属性 http msdn microsoft com en us library s
  • Tensorflow 训练期间 GPU 使用率非常低

    我正在尝试为 10 类图像分类任务训练一个简单的多层感知器 这是 Udacity 深度学习课程作业的一部分 更准确地说 任务是对各种字体呈现的字母进行分类 数据集称为 notMNIST 我最终得到的代码看起来相当简单 但无论如何我在训练期间
  • Django“模型”对象不可迭代

    我有一张表 其中显示了已注册的员工 我想根据他们的数据库生成一个简单的 HTML 页面 其中包括他们的姓名 id 职称等 为此 我将一个 id 传递给视图 以便它可以获取相应用户的详细信息并向我显示 一切正常 直到出现错误对象不可迭代 下面
  • Django Rest Framework 序列化器中的聚合(和其他带注释的)字段

    我正在尝试找出添加带注释字段的最佳方法 例如将任何聚合 计算 字段添加到 DRF 模型 序列化器 我的用例只是一种情况 端点返回的字段未存储在数据库中 而是从数据库计算得出 让我们看下面的例子 模型 py class IceCreamCom
  • 为什么最简单的 requests_mock 示例在 pytest 中失败?

    我有一个特殊的问题requests mock 我想用它pytest测试我的 API 包装器库 我尝试过使用requests mock 文档中的第一个示例 http requests mock readthedocs io en latest
  • 是否可以在 Jupyter 笔记本中显示控制台?

    我希望能够使用 Jupyter 笔记本中的控制台在环境中进行摆弄 添加额外的单元格意味着我总是必须滚动到最底部或在我想要 类似控制台 文本字段的任何地方创建新单元格 是否可以有一个永久的控制台窗口 例如在窗口底部 Thanks 您可以启动连
  • 自适应支付 API 错误 580001

    我正在 python 中向 paypal 自适应支付 API 发出 PAY 请求 并收到通用错误 id 580001 没有其他信息 headers API credentials for the API caller business ac
  • 收到“/:未找到事件。”使用 PyCharm 远程调试器时

    当我使用 PyCharm 通过 ssh 进行远程调试时tcsh shell 服务器 很多时候它停止工作 并显示 未找到事件 更具体地说 我在 pycharm 调试控制台中遇到以下内容 ssh username hostserver 22 p
  • 如何使用 selenium 获取 javascript 结果?

    我有以下代码 from selenium import selenium selenium selenium localhost 4444 chrome http some site com selenium start sel selen
  • 如何连接多个字符串? [复制]

    这个问题在这里已经有答案了 如何将 stringList 中的所有字符串合并为一个而不打印它 例如 s joinStrings very hot day returns string print s Veryhotday 感觉有点倒退 但是
  • 如何从 IDLE 命令行运行 Python 脚本?

    在 bash shell 中 我可以使用 bash 或 source 手动调用脚本 我可以在 Python IDLE 的交互式 shell 中做类似的事情吗 我知道我可以转到文件 gt gt 打开模块 然后在单独的窗口中运行它 但这很麻烦
  • Python 对列表中的值求和(如果它存在于另一个列表中)

    我有一个列表和一组 a list 1 2 2 1 1 1 b list 1 2 我正在寻找对应 b list 中的项目并将它们从 a list 中的值相加 以便输出为 1 3 2 1 我尝试过的 sum 0 for i in a list
  • 将 .parquet 编码为 io.Bytes

    目标 将 Parquet 文件上传到 MinIO 这需要将文件转换为字节 我已经能够做到这一点了 csv json and txt bytes data to csv encode utf 8 bytes json dumps self d
  • 真实值与预测值的降维可视化

    我有一个数据框 如下所示 label predicted F1 F2 F3 F40 major minor 2 1 4 major major 1 0 10 minor patch 4 3 23 major patch 2 1 11 min

随机推荐

  • Rails、Heroku 未加载我的库

    我正在一个新的 Rails 应用程序中工作 并在中创建了一个小实用程序类RAILS ROOT lib 我在其中一个控制器中使用此类require 在本地 此类已正确加载 但当我在 heroku 上部署应用程序时 它崩溃并显示 LoadErr
  • 使用代码将图像对象添加到wpf

    我是 C 和 WPF 的新手 我正在尝试创建一个简单的汽车模拟器 模拟器的主要想法是 我有 C 类来创建汽车对象 这些对象具有可以更改的速度变量和从左向右移动的计时器 我想用计时器进行运动 而不是例如doubleanimation 在 WP
  • 使用 spring RestTemplate 对 REST API 进行基本身份验证

    我对 RestTemplate 和 REST API 都是全新的 我想通过 Jira REST API 检索应用程序中的一些数据 但返回 401 Unauthorized 找到并发表文章jira Rest API 文档但真的不知道如何将其重
  • firebase iOS 无法接收推送通知

    我在我的应用程序中包含 google firebase 创建谷歌帐户 创建谷歌应用程序 上传 APNS 认证 pem 并在另一个服务中工作 并从控制台发送推送通知 但我的应用程序没有收到它 在 Firebase 控制台中 我看到状态已完成
  • PHP in_array 意外结果

    当我执行这一小段 PHP 代码时 php r echo in array 0 array aaa bbb 那回声true 当然 如果我添加严格标志 我会得到很好的返回值in array 但我就是不明白为什么它会返回true 我不能 如果有人
  • 查找 javascript 中所有没有 data- 属性的元素

    我需要找到其中的所有元素 post content 没有数据属性 我试着说类似的话if post content p attr data example 但显然这行不通 那么我将如何执行以下操作 查找所有属于 post content 且没
  • 为什么在使用函数时总是执行 Angular 2 中的 *ngIf ?

    我正在尝试使用 Angular 2 创建一个应用程序 并在我的应用程序中有一个身份验证服务 我的 html 模板是这样的
  • 如何使用 kafka 使用 python 连接 JDBC 接收器和源

    我想从一个系统直播到另一个系统 我正在使用 kafka python 并且能够在本地进行直播 发现连接器可以处理多个设备 有人可以建议我一种使用连接器在 python 中实现它的方法吗 Kafka Connect 是一个 Java 框架 而
  • RESTful 服务 - WSDL 等效项

    我一直在阅读有关 REST 和 SOAP 的内容 并了解为什么实施 REST 比使用 SOAP 协议更有利 但是 我仍然不明白为什么 REST 世界中没有 WSDL 等价物 我看到过一些帖子说 WSDL 不需要 或者说它在 REST 世界中
  • 将数据框转换为 xts

    我正在尝试使用 as xts 方法将数据帧转换为 xts 对象 这是我的输入数据框 q q t x 1 2006 01 01 00 00 00 1 2 2006 01 01 01 00 00 2 3 2006 01 01 02 00 00
  • 在 WebGL for 循环中使用制服(或类似的)的解决方法?

    我正在致力于在 WebGL 中实现片段着色器 并遇到了只能在 for 循环中使用常量表达式的限制 有人对此有任何合适的解决方法吗 在我的具体情况下 我正在实现双边过滤器 并且当前在我的片段着色器中将窗口大小指定为常量 但希望能够从 Java
  • 实体框架 - “无法创建‘闭包类型’类型的常量值...”错误

    为什么我会收到错误 无法创建 闭包类型 类型的常量值 仅有的 支持基本类型 例如 Int32 String 和 Guid 这个背景 当我尝试枚举以下 Linq 查询时 IEnumerable
  • 除了使用时间来生成随机数之外,还有其他选择吗?

    我试图在计算集群中同时运行一段代码的多个实例 2000 个实例左右 它的工作方式是 我提交作业 集群将在节点经常打开时运行它们 每个节点有多个作业 这似乎在使用时间种子的随机数生成中为大量实例生成相同的值 我可以使用一个简单的替代方案吗 可
  • 使用 python 列表理解的毕达哥拉斯三元组

    我可以使用 for 循环找出毕达哥拉斯三元组 如下所示 def triplet n Find all the Pythagorean triplets between 1 and n inclusive for a in range n 1
  • 无法将类型“double”隐式转换为“string”

    我正在编写一个程序来获取圆的半径并输出直径 面积和周长 我尝试从直径开始 但不断收到错误 无法将类型 double 隐式转换为 string 我已经使用整数完成了类似的程序 但我一生都无法弄清楚如何在文本框中接收浮点数并计算它们以便我可以输
  • 缩进#define

    我知道 defines 等通常不会缩进 为什么 我目前正在编写一些代码 其中混合了可怕的内容 defines ifdefs elses endif等等 所有这些经常与普通的 C 代码混合在一起 的非缩进 defines 使它们难以阅读 以及
  • 日期查找表 (1990/01/01:2041/12/31)

    我使用 DATE 的主表来查找日期和其他值 以便控制我的应用程序中的多个事件 间隔和计算 它包含从 01 01 1990 到 12 31 2041 之间每一天的行 我如何使用此查找表的一个示例是 一位顾客典当了一件物品 JAN 31 201
  • 如何在 Django 模型中存储元组列表?

    是否可以存储元组的字段Model在姜戈 就我而言 我有一个模型翻译器 翻译者应该存储有关他可以翻译哪些语言的信息 但可能存在翻译人员无法将英语翻译成德语的情况 但他 她可以反方向进行翻译 所以一个对象翻译器可以存储这个 从德语到英语 从 荷
  • 如何检测用户在 Angular2 中导航回来?

    我有一个组件 我需要检测用户是否在浏览器中按下后退按钮来导航回来 目前我正在订阅路由器事件 constructor private router Router private activatedRoute ActivatedRoute th
  • 如何使用python-docx替换Word文档中的文本并保存

    同一页面中提到的 oodocx 模块将用户引导至似乎不存在的 examples 文件夹 我已经阅读了 python docx 0 7 2 的文档 以及我在 Stackoverflow 中可以找到的有关该主题的所有内容 所以请相信我已经完成了