批量提取word doc文档中的表格

doc文档无法通过docx包读取,需转换为docx。

docx格式的文件本质上是一个ZIP文件。

如果将后缀改为zip就能看清内部结构。

docx提取word中的表格非常方便。

这段代码还可以提取docx中的图片。

import os, shutil, xlwt, re
from docx import Document
from win32com import client as wc
path=r'C:\Users\Administrator\Desktop\0221\正常发布的'
excelpath=os.path.join(path, "..\\")
target = os.path.join(path, "..\\docx")
imgPath = r'C:\Users\Administrator\Desktop\0221\pic'
word = wc.Dispatch("Word.Application")
imgabspath = ''
if not os.path.exists(target):
    os.mkdir(target)
if not os.path.exists(imgPath):
    os.mkdir(imgPath)

for root, dirs, files in os.walk(path):
    #print(root,files)
    for name in files:
        if name.endswith('.doc'):
            doc = word.Documents.Open(os.path.join(root, name))
            docxabs = os.path.join(target, os.path.basename(name)+'x') 
            doc.SaveAs(docxabs, 12)
            doc.Close()
        elif name.endswith('.docx'):
            docxabs = os.path.join(target, os.path.basename(name))
            shutil.copyfile(os.path.join(root, name),docxabs)
word.Quit()
                                   
workbook = xlwt.Workbook(encoding = 'GBK')
worksheet = workbook.add_sheet('公司列表')
worksheet.write(0,0,'单位名称')
worksheet.write(0,1,'营业执照(副本)注册号') 
worksheet.write(0,2,'单位性质')
worksheet.write(0,3,'单位地址')
worksheet.write(0,4,'联系人') 
worksheet.write(0,5,'联系电话') 
worksheet.write(0,6,'单位简介')
worksheet.write(0,7,'招聘信息')
worksheet.write(0,8,'营业执照')
for root, dirs, files in os.walk(target):
    c_row = 1
    for name in files:
        print(name)
        d = Document(os.path.join(root, name))
        t = d.tables
        company=t[0].cell(0,1).text.replace('\n', '').replace(' ', '')
        worksheet.write(c_row,0,company)
        worksheet.write(c_row,1,t[0].cell(0,3).text)
        worksheet.write(c_row,2,t[0].cell(1,1).text)
        worksheet.write(c_row,3,t[0].cell(2,1).text)
        worksheet.write(c_row,4,re.findall(r'[\u4E00-\u9FA5]+',t[0].cell(2,3).text))
        worksheet.write(c_row,5,re.findall("[0-9]{11}",t[0].cell(2,3).text))
        if t[0].cell(3,0).text == '单位简介':
            worksheet.write(c_row,6,t[0].cell(3,1).text)
            worksheet.write(c_row,7,t[0].cell(4,1).text)
        elif t[0].cell(4,0).text == '单位简介':
            worksheet.write(c_row,6,t[0].cell(4,1).text)
            worksheet.write(c_row,7,t[0].cell(5,1).text)
        
        if ".docx" not in name:
            continue
        #subImgPath = os.path.join(imgPath, company)
        #if not os.path.exists(subImgPath):
        #    os.makedirs(subImgPath)
        imgabspath = ''
        for rel in d.part._rels:
            rel = d.part._rels[rel]              #获得资源
            if "image" not in rel.target_ref:
                continue
            imgName = re.findall("/(.*)",rel.target_ref)[0]
            extension = os.path.splitext(imgName)[1]
            imgabspath = imgPath + "/" + company + extension
            with open(imgabspath,"wb") as f:
                f.write(rel.target_part.blob)
        if os.path.isfile(imgabspath):#os.listdir(subImgPath):
            worksheet.write(c_row,8,imgabspath)
        os.rename(os.path.join(root, name), os.path.join(root, company+'.docx'))
        
        c_row += 1
workbook.save(os.path.join(excelpath, '公司招聘列表.xls'))

 

以下是使用Python批量提取Word表格内容的方法: 1.安装python-docx库 ```shell pip install python-docx ``` 2.编写Python代码 ```python import os import docx # 定义函数,用于提取word文档表格内容 def extract_table(file_path): # 打开word文档 doc = docx.Document(file_path) # 遍历文档的所有表格 for table in doc.tables: # 遍历表格的所有行 for row in table.rows: # 遍历行的所有单元格 for cell in row.cells: # 输出单元格的文本内容 print(cell.text) # 定义函数,用于批量提取word文档表格内容 def batch_extract_table(dir_path): # 遍历目录的所有文件 for file_name in os.listdir(dir_path): # 判断文件是否为word文档 if file_name.endswith('.docx'): # 获取文件的绝对路径 file_path = os.path.join(dir_path, file_name) # 提取word文档表格内容 extract_table(file_path) # 调用函数,批量提取word文档表格内容 batch_extract_table('path/to/word/files') ``` 3.将提取到的表格内容存入Excel ```python import os import docx import openpyxl # 定义函数,用于提取word文档表格内容 def extract_table(file_path): # 打开word文档 doc = docx.Document(file_path) # 创建一个新的Excel工作簿 wb = openpyxl.Workbook() # 获取工作簿的第一个工作表 ws = wb.active # 遍历文档的所有表格 for table in doc.tables: # 遍历表格的所有行 for row in table.rows: # 创建一个新的列表,用于存储行的单元格内容 row_data = [] # 遍历行的所有单元格 for cell in row.cells: # 将单元格的文本内容添加到列表 row_data.append(cell.text) # 将列表的数据添加到工作表 ws.append(row_data) # 保存Excel工作簿 wb.save(file_path.replace('.docx', '.xlsx')) # 定义函数,用于批量提取word文档表格内容 def batch_extract_table(dir_path): # 遍历目录的所有文件 for file_name in os.listdir(dir_path): # 判断文件是否为word文档 if file_name.endswith('.docx'): # 获取文件的绝对路径 file_path = os.path.join(dir_path, file_name) # 提取word文档表格内容,并将其存入Excel extract_table(file_path) # 调用函数,批量提取word文档表格内容,并将其存入Excel batch_extract_table('path/to/word/files') ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值