一、需求
根据关键词,从Word文档里的表格中提取所需要的数据汇总到Excel中,并汇总到Excel中做台帐。
二、分析及思路
常规表格中,我们一般会通过横向填写或者竖向填写的方式来进行内容的填写,有些单元格还会有合并的情况,如下图所示,通过 python 的 docx 模块,可以完成 word 文档的信息提取:
2.1 遍历文件夹中,需要提取的 docx 文件(这里最好是把将要提取的文件放在一个文件夹中) 2.2 通过 docx 模块里面的 table 方法,通过读取行/列的方式,遍历所有表格及表格中的内容; 2.3 通过给定的关键词,筛选出需要的数据; 2.4 将获取到的所有数据通过 pandas 存储的方式保存至 excel 中。
三、整体代码
from docx import Document
from openpyxl import load_workbook
import pandas as pd
import glob
'''
关键词存储在excel表格中,先提取(也可以直接手动写一个字典用于存储关键词)
'''
workbook = load_workbook(filename = '1.xlsx')
sheet = workbook.active
data_size = sheet.dimensions
dic={}
for cell in sheet[data_size][0]:
dic[cell.value]=''
'''
遍历docx文件,读取表格相关内容
'''
doc_ls=[]
dic1={}
for path in glob.glob('*.docx'):
doc = Document(path)
for table in doc.tables:
try:
for rows in table.rows:
for i in range(0,len(rows.cells)):
if rows.cells[i].text in list(dic.keys()):
key = rows.cells[i].text
value = rows.cells[i+1].text
dic1[key] = [value]
doc_ls.append(pd.DataFrame(dic1))
except:
for cols in table.columns:
for i in range(0,len(cols.cells)):
if cols.cells[i].text in list(dic.keys()):
key = cols.cells[i].text
value = cols.cells[i+1].text
dic1[key] = [value]
doc_ls.append(pd.DataFrame(dic1))
'''
文件的合并存储
'''
df = pd.concat(doc_ls)
df.to_excel('提取后数据.xlsx')
代码相对简单,测试数据目前相对较少,可能有bug。
四、截图:
4.1 关键词的存储方式 4.2 提取后的数据
|