一、 背景
收到一份《PostgreSQL13商用文档之PG参数参考手册》,打算学习一下,打开文档一看,151页T_T。参数虽然有分类,但不太有规律,word文档格式如下:
个人觉得如果用excel来存这个表格,并且按分类来排序或者分sheet,查阅或者学习会更方便。
由于参数实在太多,靠手工复制这个周末就不要了,之前学爬虫的时候学习了Python操作excel,想必它也能操作word,于是找文章学习了一会。
二、 整体思路
1. 格式化文档
手动去掉不需要的段落及换行符,替换完的文档长这样
2. 程序操作
- pip安装 python-docx(注意不是docx,否则会报错)和openpyxl 两个模块
- 获取每一个参数类别(这里就是word的每个段落内容)
from docx import Document
# 实例化word文档
doc = Document(r'D:\postgresql\PG13参数参考手册.docx')
for paragraph in doc.paragraphs:
print(paragraph.text)
- 给每个表格加一行,存入上面的参数类别(格式化后),保存word文档。注意程序修改word文档的时候本地不要打开这个文档,否则会报错。
from docx import Document
# 格式化word文档,word表格新增一行,保存参数分类
doc = Document(r'D:\postgresql\PG13参数参考手册.docx')
i=0
type_list=[]
for paragraph in doc.paragraphs:
type_list.append(paragraph.text)
for table in doc.tables:
# 第一次执行时要打开该注释
# table.add_row()
table.cell(-1,0).text = "参数分类"
# 截取内容部分,去掉编号,.,--等,去掉头尾空格
table.cell(-1,1).text=type_list[i].split(".")[-1].split("--")[-1].strip()
i=i+1
doc.save(r'D:\postgresql\PG13参数参考手册.docx')
- 获取word表格第二列的每一行,存入一个list
- 将每个list append到excel,保存即可。也注意程序修改excel文档的时候本地不要打开这个文档,否则会报错。
from docx import Document
from openpyxl import Workbook
# 实例化word文档
doc = Document(r'D:\postgresql\PG13参数参考手册.docx')
# word表格存入excel
# 实例化excel文档
wb = Workbook()
# 获取当前sheet
sheet = wb.active
# 设立表头
header = ['参数名称', '数据类型', '默认值', '取值范围', '参数单位', '参数含义','是否可session级修改','修改后何时生效','参数分类']
sheet.append(header)
# 取每个表格第二列的值
for table in doc.tables:
row_list = []
for i in range(len(table.rows)):
row_list.append(table.cell(i,1).text)
sheet.append(row_list)
wb.save(r'D:\postgresql\PG13参数参考手册.xlsx')
两三秒它就跑完了~ 执行结果如下:
3. excel格式化
简单调整下excel格式,按参数分类排序即可
三、 实现代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022-07-08 23:57
# @Author: Hehuyi_In
# @File : word_to_excel.py
from docx import Document
from openpyxl import Workbook
# 格式化word文档,word表格新增一行,保存参数分类
# 实例化word文档
doc = Document(r'D:\postgresql\PG13参数参考手册.docx')
i=0
type_list=[]
for paragraph in doc.paragraphs:
type_list.append(paragraph.text)
for table in doc.tables:
# 第一次执行时要打开该注释
# table.add_row()
table.cell(-1,0).text = "参数分类"
# 截取内容部分,去掉编号,.,--等,去掉头尾空格
table.cell(-1,1).text=type_list[i].split(".")[-1].split("--")[-1].strip()
i=i+1
doc.save(r'D:\postgresql\PG13参数参考手册.docx')
# word表格存入excel
# 实例化excel文档
wb = Workbook()
# 获取当前sheet
sheet = wb.active
# 设立表头
header = ['参数名称', '数据类型', '默认值', '取值范围', '参数单位', '参数含义','是否可session级修改','修改后何时生效','参数分类']
sheet.append(header)
# 输出表格中每行每列的值
# for table in doc.tables:
# for i in range(len(table.rows)):
# for j in range(len(table.columns)):
# print(table.cell(i,j).text)
# 实际只需要每个表格第二列的值,因此修改一下
for table in doc.tables:
row_list = []
for i in range(len(table.rows)):
row_list.append(table.cell(i,1).text)
sheet.append(row_list)
wb.save(r'D:\postgresql\PG13参数参考手册.xlsx')
参考
《PostgreSQL13商用文档之PG参数参考手册》
python提取word内容并写入excle_lau_jw的博
别再问我Python怎么操作Word了!
多图+代码 | 详解Python操作Excel神器openpyxl的各种操作!
如何利用Python批量将Word中的信息提取到Excel?_俊红的数据分hon处理word表格