Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在word 2007.docx文件中搜索单词?_Python_Ms Word_Openxml_Docx - Fatal编程技术网

Python 如何在word 2007.docx文件中搜索单词?

Python 如何在word 2007.docx文件中搜索单词?,python,ms-word,openxml,docx,Python,Ms Word,Openxml,Docx,我想在Word 2007文件(.docx)中搜索文本字符串,例如,可以在Word中搜索到的“某些特殊短语” Python有没有办法查看文本?我对格式化不感兴趣-我只想将文档分类为是否有“某些特殊短语”。docx只是一个包含大量文件的zip存档。也许你可以看看那些文件的一些内容?除此之外,你可能需要找到一个理解单词格式的库,这样你就可以过滤掉你不感兴趣的东西 第二种选择是与word互操作并在其中进行搜索。docx文件本质上是一个包含xml的zip文件。 xml包含格式,但也包含文本。您应该能够使用

我想在Word 2007文件(.docx)中搜索文本字符串,例如,可以在Word中搜索到的“某些特殊短语”


Python有没有办法查看文本?我对格式化不感兴趣-我只想将文档分类为是否有“某些特殊短语”。

docx只是一个包含大量文件的zip存档。也许你可以看看那些文件的一些内容?除此之外,你可能需要找到一个理解单词格式的库,这样你就可以过滤掉你不感兴趣的东西


第二种选择是与word互操作并在其中进行搜索。

docx文件本质上是一个包含xml的zip文件。

xml包含格式,但也包含文本。

您应该能够使用MSWord ActiveX界面提取要搜索的文本(或者,可能进行搜索)。但我不知道如何从Python访问ActiveX。

更确切地说,.docx文档是OpenXML格式的Zip存档:您必须首先解压缩它。

我下载了一个示例(谷歌:一些搜索词filetype:docx),解压后我找到了一些文件夹。word文件夹包含文档本身,位于document.xml文件中。

OLE自动化可能是最简单的。您必须考虑格式化,因为在XML:

中,文本可以是这样的。
<b>Looking <i>for</i> this <u>phrase</u>
正在查找此短语
使用简单的文本扫描是不容易找到的。

在本例中,“Course Outline.docx”是Word 2007文档,其中包含单词“Windows”,并且不包含短语“random other string”


基本上,您只需使用打开docx文件(这是一个zip存档),然后在“word”文件夹中的“document.xml”文件中找到内容。如果你想变得更老练,你可以,但是如果你只是在寻找一个短语(你知道它不会成为标签),然后您可以在XML中查找字符串。

您也可以考虑使用从

中的库。在Word文档XML文件中搜索一个问题是,文本可以在任何字符中分割成元素。如果格式不同,它肯定会被拆分,例如在HelloWorld中。但它可以在任何一点进行拆分,这在OOXML中是有效的。因此,即使格式化在短语中间没有改变,最终也会像这样处理XML。
<w:p w:rsidR="00C07F31" w:rsidRDefault="003F6D7A">

<w:r w:rsidRPr="003F6D7A">

<w:rPr>

<w:b /> 

</w:rPr>

<w:t>Hello</w:t> 

</w:r>

<w:r>

<w:t xml:space="preserve">World.</w:t> 

</w:r>

</w:p>

你好
世界。
当然,您可以将其加载到XML DOM树中(不确定在Python中会是什么),并要求仅以字符串形式获取文本,但最终可能会出现许多其他“死胡同”,因为OOXML规范大约有6000页长,MS Word可以编写许多您意想不到的“东西”。因此,您可以编写自己的文档处理库

或者你可以试着使用


它以.NET和Java产品的形式提供。两者都可以从Python中使用。一个通过COM互操作,另一个通过JPype互操作。请参阅Aspose.Words程序员指南,使用其他编程语言中的Aspose.Words(很抱歉,我无法发布第二个链接,stackoverflow还不允许我发布)。

在阅读了您上面的文章后,我制作了一个100%本机Python docx模块来解决此特定问题

# Import the module
from docx import *

# Open the .docx file
document = opendocx('A document.docx')

# Search returns true if found    
search(document,'your search string')

docx模块位于

您可以使用docx2txt获取docx中的文本,然后在该文本中搜索

npm install -g docx2txt
docx2txt input.docx # This will  print the text to stdout

在元素文本中查找短语(使用XML解析器)可能比担心文本的一部分是否与元素名匹配更容易。是的,我得到了所有XML文件。现在我想问你,我们如何获得所有值,如(粗体、斜体、颜色、方名、空格)和所有格式设置,我们如何从xml中获取这些值。
OOXML规范大约有6000页长
:你一定是在开玩笑:OWait。。。你就为了这个问题写了整个模块@11684是的,我遇到了与海报相同的问题,我所能做的就是从Python调用.net或Java的可怕解决方案。如果我知道如何给你我的声誉分数,我会奖励他们这个-编写解决方案-答案!所以我改为发推特。少校,谢谢!(解决这个问题的总时间:25分钟,感谢有人为我编写代码)我认为奈尔应该得到一个迷因。“好人内勒。看到一个朋友被代码困扰。他自己写了一个库。”
opendocx
search
在v0.8.10版中不起作用。我找不到有关
搜索的任何信息
opendocx
现在似乎是
文档
npm install -g docx2txt
docx2txt input.docx # This will  print the text to stdout