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

时间:2013-09-21 15:05:21

标签: 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(0,len(soup('table'))):
    soup.table.decompose()
Text = soup.get_text()

虽然这个过程有效并且产生我需要的东西,但docx2html.convert()存在一些效率问题。由于.docx文件是inform .xml文件,是否可以跳过将docx转换为html的过程,并在删除表后从xml中提取文本。

1 个答案:

答案 0 :(得分:1)

docx文件不仅仅是xml文件,而是zipped xml based format,因此您无法将docx文件直接传递给BeautifulSoup。尽管as the zipped docx contains a file called word/document.xml可能是您要解析的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

但是,您可能还想查看https://github.com/mikemaccana/python-docx,它可能会执行您想要的很多内容。我没有尝试过,所以我不能保证它适合您的特定用例。