python 办公常用二:批量提取 word 表格中信息 您所在的位置:网站首页 从word表格中提取数据到excel中 python 办公常用二:批量提取 word 表格中信息

python 办公常用二:批量提取 word 表格中信息

2023-09-21 09:01| 来源: 网络整理| 查看: 265

python 办公常用 二、批量提取 word 表格中信息

假设有一批表格(word 文档)例如:table.docx 在这里插入图片描述

第一个表格

import docx doc = docx.Document('table.docx') tables = doc.tables tables #[, ] cells=tables[0]._cells cells_text=[[cell.text for cell in cells]] cells_text """ [['姓名', '雅克', '性别', '男', '民族', '汉族', '照片', '籍贯', '河北', '出生日期', '出生日期', '1965-07-01', '1965-07-01', '照片', '工作单位', '宣化科技职业学院', '宣化科技职业学院', '电话', '15833231111', '15833231111', '照片', '住址', '张家口', '张家口', '张家口', '张家口', '张家口', '照片']] """ # 注意:四行7列共28个单元格,索引从第一行1列开始,依次第二行......。合并的单元格值相同。 import pandas as pd import numpy as np df = pd.DataFrame(cells_text) df

在这里插入图片描述

data = df[[1,3,5,8,11,15,18,22]] data.columns = df[[0,2,4,7,10,14,17,21]].values.tolist()[0] data

在这里插入图片描述

整合代码

import docx doc = docx.Document('table.docx') tables = doc.tables cells=tables[0]._cells cells_text=[[cell.text for cell in cells]] import pandas as pd import numpy as np df = pd.DataFrame(cells_text) data = df[[1,3,5,8,11,15,18,22]] data.columns = df[[0,2,4,7,10,14,17,21]].values.tolist()[0]

第二个表格

lis1 = [[cell.text for cell in r.cells] for r in tables[1].rows] lis1 """ [['姓名', '性别', '班级', '总分'], ['张三', '男', '20-1', '500'], ['李四', '男', '20-2', '600'], ['王五', '女', '20-1', '450']] """ data = pd.DataFrame(lis1[1:],columns=lis1[0]) data """ 姓名 性别 班级 总分 0 张三 男 20-1 500 1 李四 男 20-2 600 2 王五 女 20-1 450 """

汇总相同类型的文档

# 批量读取数据 import os os.chdir('word文档路径') lis1 = [] for file in os.listdir('.'): if file.endswith('.docx'): doc = docx.Document('./'+file) tables = doc.tables for row in tables[1].rows: lis1.append([cell.text for cell in row.cells]) data = pd.DataFrame(lis1[1:],columns=lis1[0]) data 知识点 一、python-docx 1、创建与合并表格 1)创建文档 import docx doc = docx.Document() # doc = docx.Document('table.docx') # 打开 word 文档 2)添加表格

Table objects are constructed using the add_table() method on Document. 用 Document 类的 add_table 方法增加一个表格,其中 rows 是行,cols 是列,style 表格样式:

table=doc.add_table(rows=4,cols=7,style='Table Grid') # 在 Document 里插入了一个4行、7列的表格。

生成的每个 cell 都是有“坐标”的,比如上面的表格左上角 cell 为(0,0),右下角 cell 为(3,6)

3)合并 cell table.cell(1,2).merge(table.cell(1,3)) table.cell(1,4).merge(table.cell(1,5)) table.cell(2,1).merge(table.cell(2,2)) table.cell(2,4).merge(table.cell(2,5)) table.cell(3,1).merge(table.cell(3,5)) table.cell(0,6).merge(table.cell(3,6))

这里需要注意的是,虽然每个 cell 都合并了,但其实它还是存在的。比如合并了(0,0)和(0,1)两个 cell,那么这个合并的cell 其实就是(0,0;0,1)

如果 cell 较多,无法直观的看出坐标的话,可以用下列的代码将每个 cell 的坐标都标注出来,方便合并

doc = docx.Document() table=doc.add_table(rows= 4,cols=7,style='Table Grid') doc.save('table-1.docx') doc1 = docx.Document('table-1.docx') table = doc1.tables[0] for row,obj_row in enumerate(table.rows): for col,cell in enumerate(obj_row.cells): cell.text = cell.text + "%d,%d " % (row,col) document1.save('table-2.docx') 2、添加文本

Table row

# row_0 = table.rows[0].cells # tuple row_0 = table.row_cells(0) row_1 = table.row_cells(1) row_2 = table.row_cells(2) row_3 = table.row_cells(3)

用 add_paragraph 方法即可像 cell 里添加文本

row_0[0].add_paragraph('姓名') row_0[2].add_paragraph('性别') row_0[4].add_paragraph('民族') row_0[6].add_paragraph('照片') row_1[0].add_paragraph('籍贯') row_1[2].add_paragraph('出生日期') row_2[0].add_paragraph('工作单位') row_2[3].add_paragraph('电话') row_3[0].add_paragraph('住址') 3、设置文本属性(如大小、加粗、下划线、居中等)

在 python-docx 中,word 主要有两种文本格式等级:块等级(block-level)和内联等级(inline-level)。

段落是 word 文件中主要的块对象,图片、表、标题、列表也是块对象

内联对象是块对象的组成部分块对象的所有内容都包含在内联对象中,一个块对象由一个或多个内联对象组成

run 是常用的内联对象,例如:

p = document.add_paragraph(‘This is paragraph’) p.add_run(‘bold’).bold = True p.add_run(’ and some ').font.size = Pt(14) p.add_run(‘italic.’).italic = True

这个例子中一个段落(块对象)包含三个 run(内联对象),每一个 run 依次设置了粗体、大小、斜体三种属性

具体设置 run 属性直接用代码说明,更详细的请直接查阅官方文档。

from docx import Document from docx.shared import Inches, Pt from docx.enum.text import WD_ALIGN_PARAGRAPH document = Document() #设置整个文档的默认字体 document.styles['Normal'].font.name = u'宋体' document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') p1=document.add_paragraph() #设置p1段落居中 p1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER #p1段落大小 p1.paragraph_format.line_spacing = Pt(25) #给p1段落添加run对象r1,并设置文本 r1 =p1.add_run('添加文本\r添加文本\n') #文字大小 r1.font.size = Pt(16) #粗体 r1.bold = True #下划线 r1.font.underline = True 2、pandas


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有