【翻译】基于python-docx实现的解析docx文件,顺序保存文字、表格、图片

xiaoya

发布日期: 2021-02-13 10:13:48 浏览量: 100
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

前些天由于程序的需要,要从docx文档中,按文档的顺序获取文字、图片、表格信息,按自己想要的排版方式,转换成markdown格式。但是,卡在了按顺序获取文字、图片、表格上。查找了很多资料,很多都是介绍怎么使用python-docx添加文字、图片、表格的。后来经过多方查找,终于找到一份国外的源码(源码地址附在文后),已经实现了按顺序获取文字、图片、表格的功能。为了节省大家搜索时间,所以把他的英文文档翻译成中文,方便大家查阅。原文翻译如下:

python-docx是用于创建和处理Microsoft Word(.docx)文件的Python库。Python-docx包无法按文档顺序完全读取段落,表格和图像。按照文档顺序,它只能一次获取所有段落,或者一次获取所有表格,或者一次获取所有图像。在这里,我提供了一种方法,可以将docx文件中的段落、表格和图像按文档顺序读取到python的数据框中。

该代码位于“Para_table_image_extraction.py”的文件内。在以任何docx文件作为输入运行此代码时,此代码将生成3个数据帧,即“combined_df”、“table_list”和“image_df”:

  • docx文件的所有内容(包括段落,表和图像)都按顺序存储在名为“combined_df”的python数据帧中

  • 如果在文档的段落之后出现图像,则对该图像的引用将存储在“combined_df”数据框中,而不是实际图像。您将必须从“combined_df”引用图像索引,并从名为“image_df”的单独数据帧中检索图像数据,该数据帧存储image_index和每个图像的相应base64编码图像数据

  • 类似地,如果在文档中遇到表,则将填充“combined_df”数据框中的“table_id”列。而且,您将不得不从“table_list”中检索与“ table_id”相关的对应表

下图是示例 word 文档(docx):

下图是根据上述docx文件生成的“combined_df”数据帧:

在上述数据帧中:

  • para_text:表示文档的实际段落内容(每一行代表文档中的每个段落)

  • table_id:表示表格的表ID(如果在该文档的该位置存在表)。如果没有表格,则其值表示为“ Novalue”

  • style:代表相应段落的段落样式

注意,图像和表格不会这样存储在combined_df数据框中。对这些对象的引用仅存储在combined_df中。这意味着对于在Combined_df中存在的每个图像ID或表格ID,您将必须从combined_df中检索图像ID或表格ID,并从image_df和table_list中根据这些ID来获取图像数据或表格数据。

图像文件以以下符号表示:

  1. combined_df中的 Document_Imagefile/image1.png/rId7/0

这表示该引用实际上是一个图像文件,其中“image1.png”作为图像名称,“rId7”作为图像的唯一ID或标识符,“0”图片索引将在image_df中引用。

表格对象表示为“<docx.table.0x1020f1160处的表对象>”,它表示在该位置存在一个带有相应table_id的表。您可以在“table_list”索引中根据table_id来获取获取表格数据。table_list包含所有表格的信息。

我还没有包含使用来自combined_df的唯一标识符从image_df和table_list提取图像和表格的代码。我之所以没有这样做,是因为用例可能因情况而异。您可以用自己的方式提取它们,然后执行您希望执行的任何后续操作。

原文链接Python-docx-Reading-paragraphs-tables-and-images-in-document-order

上传的附件 cloud_download Python-docx-Reading-paragraphs-tables-and-images-in-document-order--master.zip ( 1.32mb, 2次下载 )

发送私信

嘎嘎嘎

14
文章数
15
评论数
最近文章
eject