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 连连看连接算法
Nov 22 Python
在Python程序员面试中被问的最多的10道题
Dec 05 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
pip指定python位置安装软件包的方法
Jul 12 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
Jan 19 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
python计算auc的方法
Sep 09 Python
Java Unsafe类实现原理及测试代码
Sep 15 Python
golang特有程序结构入门教程
Jun 02 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
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
php截取视频指定帧为图片
2016/05/16 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
浅析python继承与多重继承
2018/09/13 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
企业优秀员工事迹材料
2014/05/28 职场文书
综治维稳工作汇报
2014/10/27 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书