Python 如何有效地从docx/xml中删除表并提取文本

Python 如何有效地从docx/xml中删除表并提取文本,python,xml,beautifulsoup,lxml,Python,Xml,Beautifulsoup,Lxml,删除表后,我无法从.docx中提取文本。 我正在处理的docx文件包含很多表,我希望在提取文本之前将这些表去掉。 我首先使用docx2html将docx文件转换为html,然后使用BeautifulSoup删除表标记并提取文本 from docx2html import convert from bs4 import BeautifulSoup ... temp = convert(FileToConvert) soup = BeautifulSoup(temp) for i in range(

删除表后,我无法从.docx中提取文本。 我正在处理的docx文件包含很多表,我希望在提取文本之前将这些表去掉。 我首先使用docx2html将docx文件转换为html,然后使用BeautifulSoup删除表标记并提取文本

from docx2html import convert
from bs4 import BeautifulSoup
...
temp = convert(FileToConvert)
soup = BeautifulSoup(temp)
for i in range(0,len(soup('table'))):
    soup.table.decompose()
Text = soup.get_text()

虽然此过程可以工作并生成所需的内容,但docx2html.convert()存在一些效率问题。由于.docx文件位于infact.xml文件中,是否可以跳过将docx转换为html的过程,并在删除表后从xml中提取文本。

docx文件不仅仅是xml文件,而是一个文件,因此您无法将docx文件直接传递给BeautifulSoup。虽然格式看起来很简单,但它可能就是您想要解析的xml文件。您可以使用Python的zipfile模块提取此文件,并将其内容直接传递给BeautfulSoup:

import sys
import zipfile

from bs4 import BeautifulSoup

with zipfile.ZipFile(sys.argv[1], 'r') as zfp:
    with zfp.open('word/document.xml') as fp:
        soup = BeautifulSoup(fp.read(), 'xml')

print soup

但是,您可能还想看看,它可能已经做了很多您想要的事情。我没有试过,所以我不能保证它适合您的特定用例。

docx文件不仅仅是xml文件,而是一个文档,因此您无法将docx文件直接传递给BeautifulSoup。虽然格式看起来很简单,但它可能就是您想要解析的xml文件。您可以使用Python的zipfile模块提取此文件,并将其内容直接传递给BeautfulSoup:

import sys
import zipfile

from bs4 import BeautifulSoup

with zipfile.ZipFile(sys.argv[1], 'r') as zfp:
    with zfp.open('word/document.xml') as fp:
        soup = BeautifulSoup(fp.read(), 'xml')

print soup

但是,您可能还想看看,它可能已经做了很多您想要的事情。我还没有尝试过它,所以我不能保证它适合您的特定用例。

关于python docx,您是对的。它负责从.docx文件中提取文本。将docx传递给python docx后,将生成一个lxml.etree.Element,可以使用lxml解析器对其进行操作。它负责从.docx文件中提取文本。将docx传递给python docx后,将生成一个lxml.etree.Element,可以使用lxml解析器对其进行操作。