Python word文本自动化操作实现方法解析


Posted in Python onNovember 05, 2020

之前介绍了一个Python包 openpyxl ,用于处理 Excel ;而对于 Word 文本时同样也有对应的 Python库 Python-docx,在日常办公中,如果需要处理多个 word 文本,且操作步骤都是重复单调的,我想这个库就可以帮到你

在了解 Python-docx 常用函数之前,需要知道 在 Python-docx 各命令所对应 word 各部件,下图所示,

  • Document 指的是 word 文档;
  • paragraph 对应段落;
  • run 对应 一句话中的各个字段,样式调整时,一般面向的操作对象都是逐字段进行;

Python word文本自动化操作实现方法解析

1,安装 Python-docx

通过 pip 工具即可进行安装,在命令行中输入 pip install Python-docx 即可

Python word文本自动化操作实现方法解析

2,创建或打开 Document

Python-docx 导入包时是以 docx 命令存在的,与 Opencv 的 Python 版本导入方法相似;创建文件、打开文件以 Document() 命令操作,这里操作时需要注意几个点:

1,Document() 命令是基于默认”模板“创建一个空白文档,随后可对文档进行编辑操作,最后没有用 save() 函数存储的话,文档将伴随程序结束同内存一起

2,Document(path) 命令表示打开一个本地已经存在的 docx 文件,path 表示存放目录若不存在则程序报错;
下面代码中,创建了一个空白 docx,赋值给 document

from docx import Document

document = Document()

3,加入一段落

段落作为 docx 文档正文的主要成分,那怎样在创建好的 Document 中加入一段话呢?官方给出了两种方式

1,在文档后面插入

这种方法是比较常见且简单的,命令如下

paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.')

方法中将创建好的段落引用指向 paragraph ,表明了光标的位置,后面的一些操作可以借助 paragraph 引用变量来作为定位操作

2,在指定地方的前面插入

文档编辑正常顺序是在末尾进行编辑,但有时在编辑时可能失误少输入一段话或文字,这时就用到 在指定位置前面 进行插入操作

prior_paragraph = paragraph.insert_paragraph_before('Lorem ipsum')

此命令常用于 修正文档 ,当需要在一段话前面添加一些别的文字时。

4,标题

docx 中 会用一、二、三级标题将正文分为几部分,让文本主次感更强;Python-docx 有对应的内置函数供我们使用,内置函数中标题分为主标题和子标题

创建标题的函数方法中,有一个参数 level 可进行修改,若不设定时默认为 主标题(leve = 0);

document.add_heading('The REAL meaning of the universe')

子标题分为 1-9 九个等级,修改参数 level 即可

document.add_heading('The role of dolphins', level=2)

5,分页符

在 Word 中进行文本编辑,想在单独的一个新页面编写文本时,就需要加入一个 强制分页符,命令如下

document.add_page_break()

这里需要注意下,加入分页符之后,新页面上编辑的段落样式属性与之前页面段落属性是分隔开的

6,表格

在文档中创建一个 2*2 的 表格

table = document.add_table(rows=2, cols=2)

表格中每个单元格可进行文本编辑,颜色填充;对于特定表格而言可通过 row、column 索引来进行定位,这里借助了操作 Excel 表格的思想

cell = table.cell(0, 1)

赋值其文本内容

cell.text = 'parrot, possibly dead'

对一个一个单元格修改操作太麻烦了,可以一次选中指定列,对其单元格数据进行逐个修改

row = table.rows[1]
row.cells[0].text = 'Foo bar to you.'
row.cells[1].text = 'And a hearty foo bar to you too sir!'

table.rows[index] 返回索引为 index 的指定行,根据 .rows和.cols 表示 表格的全部行或列是可迭代的,因此可通过 for 循环来访问每一个单元格

for row in table.rows:
for cell in row.cells:
print(cell.text)

因为 .rows 和 .cols 是可迭代的,通过 len() 命令来获取行、列数

row_count = len(table.rows)
col_count = len(table.columns)

除了以上操作之外,还可以向 table 中逐渐添加行、列命令

row = table.add_row()
col = table.add_col()

上面提到了 创建表格,单元格修改,创建新行/列,逐行/列迭代,下面用个实例做个简单总结,代码中完成功能如下:

  • 1,item 创建一个 3*3 的元组数据;
  • 2,在 word 中新建一个 table,一行三列;
  • 3,创建好的 table 的表头依次设置为 Qty,SKU,Description;
  • 4,将 item 中的元素,以 table 逐行 3 个的方式创建;
# get table data -------------
items = (
  (7, '1024', 'Plush kittens'),
  (3, '2042', 'Furbees'),
  (1, '1288', 'French Poodle Collars, Deluxe'),
)

# add table ------------------
table = document.add_table(1, 3)

# populate header row --------
heading_cells = table.rows[0].cells
heading_cells[0].text = 'Qty'
heading_cells[1].text = 'SKU'
heading_cells[2].text = 'Description'

# add a data row for each item
for item in items:
  cells = table.add_row().cells
  cells[0].text = str(item.qty)
  cells[1].text = item.sku
  cells[2].text = item.desc

此外,还可修改 表格的样式,word 文档中的表格样式这里都可以设定(样式名称可以通过word 文档自有的样式,将鼠标放到样式的缩略图上即可查看),但需要注意的是,使用样式时需要去掉word软件中样式名字中的空格,例如下面 Office 原样式名字为 Light Shading-Accent1,这里直接把中间空格去掉

table.style = 'LightShading-Accent1'

7,图片

在 python-docx 中添加图片用下面命令即可完成

document.add_picture('image-filename.png')

上面加入的是本地文件 path ,除此之外还可以使用 file-like object,这种格式对于数据库或者网络上的图片读取时时非常方便的

修改图片大小

python-docx 加入图像默认表示的是 native size,正常图片加入时会出现相同图片的一侧出现 4.167 inches 的空白处,大概占比纸张宽度的一半;在获取想要图像大小时,可以指定宽度或高度设为较为方便的单位

from docx.shared import Inches

document.add_picture('image-filename.png', width=Inches(1.0))

8, 应用段落样式

设定段落样式方法有两种,一种创建时就可以设置

document.add_paragraph('Lorem ipsum dolor sit amet.', style='ListBullet')

另一种是创建完之后再再进行设置(这时不需要去掉样式名称中的空格)

paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.')
paragraph.style = 'List Bullet'

9,字体加黑并斜体化

对字体做斜体和加黑操作之前, 需要理解在一个段落中都做了什么事情,简单来说两部分:

1,一个段落具有全部 block-level formatting ,比如制表符、行高、tabs 等;

2,Character-level formatting ,例如粗体、斜体,应用的是 run对象,在段落中的所有内容必须是一个 run ,且不仅包含一个,
Run 对象同时包含一个 .bold 和.italic 属性,可让你来对其值进行设置

paragraph = document.add_paragraph('Lorem ipsum ')
run = paragraph.add_run('dolor')
run.bold = True
paragraph.add_run(' sit amet.')

上面代码中最后创建的文本格式形如:Lorem ipsum dolor sit amet.

需要注意的是设置 bold 或 italic 时,可以把 .add_run() 命令直接放在右边

paragraph.add_run('dolor').bold = True

# is equivalent to:

run = paragraph.add_run('dolor')
run.bold = True

# except you don't have a reference to `run` afterward

10,字符样式

除了上面加黑、斜体之外、还可定义字符样式( character styles ), 定义时加入一行新的 run 对象;例如

paragraph = document.add_paragraph('Normal text, ')
paragraph.add_run('text with emphasis.', 'Emphasis')

上面创建一个文本 ,结果如下

Normal text,text with emphasis. ;text with emphasis. 部分应用 Emphasis(强调) 的字符格式

上面代码也可改为;

paragraph = document.add_paragraph('Normal text, ')
run = paragraph.add_run('text with emphasis.')
run.style = 'Emphasis'

与段落样式一样,样式名字与 Word UI 里的一样,在 Word 样式管理器中都能找得到!

Python word文本自动化操作实现方法解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
解决Python2.7中IDLE启动没有反应的问题
Nov 30 Python
python实现QQ邮箱/163邮箱的邮件发送
Jan 22 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
Python如何在windows环境安装pip及rarfile
Jun 15 Python
详解python中的闭包
Sep 07 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
基于python制作简易版学生信息管理系统
Apr 20 Python
python3 字符串str和bytes相互转换
Mar 23 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 #Python
Python中用xlwt制作表格实例讲解
Nov 05 #Python
如何利用pycharm进行代码更新比较
Nov 04 #Python
python产生模拟数据faker库的使用详解
Nov 04 #Python
Django配置跨域并开发测试接口
Nov 04 #Python
Python基于Serializer实现字段验证及序列化
Nov 04 #Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 #Python
You might like
深入了解php4(1)--回到未来
2006/10/09 PHP
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
学习ExtJS form布局
2009/10/08 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
python中set常用操作汇总
2016/06/30 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
python如何从文件读取数据及解析
2019/09/19 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
自荐信模版
2013/10/24 职场文书
机电一体化专业应届生求职信
2013/11/27 职场文书
师范生个人推荐信
2013/11/29 职场文书
单位租房协议书样本
2014/10/30 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
银行求职信范文
2019/05/13 职场文书