python读取WORD中表格中的文本及图片数据

一、 问题描述

        因手头有几百个WORD文档,每个文档为针对某些企业的安全隐患检查数据,包括隐患文字信息及图片。具体格式如下:

python读取WORD中表格中的文本及图片数据_第1张图片

 现希望通过程序自动读取其中的图片及其文字。最后存入数据库中。考虑用python自动读取相关数据及图片。

二、图片文件读取的处理

        通过python读取图片文件,统一另存到文件夹”d:/temp/“中,图片文件统一按规范格式“p_检查ID_行号_图号”生成,形如“p147_1_1.jpg”。

# 函数:get_picturelist   
# 功能:提取WORD文件中的图片生成列表,结果生成列表文件,图片文件格式形如“p147_1_1.jpg”。
#       意义:p_检查ID_行号_图号,安全隐患每个检查ID为一个WORD表格,某一行中的图片不一定只有1张,可能会有2张以上的图片,所以通过行号,图片加以识别。
# 参数1:document 为文档对象。
# 参数2:paragraph 为内嵌图片的段落对象,比如第1段内
# 参数3:picpre 图片文件前前缀。 
def get_picturelist(document:Document, paragraphs, picpre):
    # 获取WORD中的图片列表,有可能一个段落中含有多张图片
    img_list = []
    for paragraph in paragraphs:
        img_list += paragraph._element.xpath('.//pic:pic')
    if len(img_list) == 0 or not img_list:
        return []
    # 将图片列表中的图片读出来另存为文件,并返回文件名列表
    size = len(img_list)
    re_list=[]
    for i in range(0,size):
        img:CT_Picture = img_list[i]
        embed = img.xpath('.//a:blip/@r:embed')[0]
        related_part:ImagePart = document.part.related_parts[embed]
        image: Image = related_part.image
        re_list.append(image)
    # 保存图片文件 并返回文件名列表
    result_list=[]
    i = 1
    for pic in re_list:
        filename = "d:/temp/%s_%d.jpg" % (picpre,i) 
        # print("保存图片文件%s..." % filename, end='')
        fw = open(filename,"wb")
        fw.write(pic.blob)
        fw.close() 
        # print("完成!")
        result_list.append(filename)
        i += 1
    return result_list
# --------------------------------------------------

三、提取WORD表格中的文字内容以及图片列表

# 提取表格中的安全隐患文字信息
# 参数:
# doc   -- 对应的WORD文档对象
# table ---Word文档中的表格,如表格索引从0开始,例如 doc.tables[0]为WORD文档中的第1个表格,我这里数据在第3个表格doc.tables[2]
def get_yhlist(doc,table,inspect_id):
    yhlist = []
    for i in range(1, len(table.rows)):
        # indexno = table.cell(i, 0).text
        indexno = i
        hztype  = table.cell(i, 1).text
        picpre = "p%d_%d" % (inspect_id,i) 
        pic = get_picturelist(doc,table.cell(i,2).paragraphs, picpre)
        hzdesc  = table.cell(i, 3).text
        zgjy    = table.cell(i, 4).text
        yhlist.append({
            'indexno':indexno,  # 序号
            'hztype':hztype,	# 危险类别
            'pic': pic,			# 图片文件名
            'hzdesc':hzdesc,	# 隐患问题描述
            'zgjy':zgjy			# 整改建议
            })
    return yhlist
# --------------------------------------------------

四、调用函数示例

# 调用get_yhlist函数
for i in range(1,100):
  docfile = 'file'+str(i)
  doc = Document(docfile)
  qyname = doc.tables[0].cell(1,1).text
  print('企业名称=%s',qyname)
  yhlist = get_yhlist(doc,doc.tables[2],inspect_id)	
  #隐患列表后续存入数据库中,在此不再展开。

五、需要导入的库

为控制WORD,需要用到docx库。

from docx import Document
from docx.image.image import Image
from docx.parts.image import ImagePart
from docx.oxml.shape import CT_Picture


你可能感兴趣的:(Python,word,python,开发语言)