同一页中提到的 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
原文由 user2738815 发布,翻译遵循 CC BY-SA 4.0 许可协议
更新: 有几个段落级函数可以很好地完成这项工作,可以在 GitHub 站点上找到
python-docx
。当前版本的 python-docx 没有
search()
函数或replace()
函数。这些要求相当频繁,但一般情况下的实施非常棘手,而且还没有上升到积压的顶部。不过,有几个人已经取得了成功,他们使用现有的设施完成了他们需要的事情。这是一个例子。顺便说一句,它与部分无关:)
要在表格中搜索,您需要使用类似的东西:
如果您走这条路,您可能会很快发现其中的复杂性。如果您替换段落的整个文本,这将删除任何字符级格式,例如粗体或斜体的单词或短语。
顺便说一句,@wnnnmaw 的答案中的代码适用于 python-docx 的旧版本,并且在 0.3.0 之后的版本中根本不起作用。