Python 操作 Word
上次给大家介绍了 Python 如何操作 Excel ,是不是感觉还挺有趣的,今天为大家再介绍下,用 Python 如何操作 Word ,这个可能跟数据处理关系不大,用的也不多,不过可以先了解下都能实现什么功能,以备不时之需。
安装 python-docx
处理 Word 需要用到 python-docx 库,目前版本为 0.8.10
,执行如下安装命令:
$ pip3 install python-docx
################# 运行结果 ################
Collecting python-docx
Downloading https://files.pythonhosted.org/packages/e4/83/c66a1934ed5ed8ab1dbb9931f1779079f8bca0f6bbc5793c06c4b5e7d671/python-docx-0.8.10.tar.gz (5.5MB)
|████████████████████████████████| 5.5MB 553kB/s
Requirement already satisfied: lxml>=2.3.2 in /usr/local/lib/python3.7/site-packages (from python-docx) (4.4.1)
Building wheels for collected packages: python-docx
Building wheel for python-docx (setup.py) ... done
Stored in directory: /Users/mjg/Library/Caches/pip/wheels/18/0b/a0/1dd62ff812c857c9e487f27d80d53d2b40531bec1acecfa47b
Successfully built python-docx
Installing collected packages: python-docx
Successfully installed python-docx-0.8.10
OK,如果提示以上信息则安装成功。
写入 Word
平时我们在操作 Word 写文档的时候,一般分为几部分:标题、章节、段落、图片、表格、引用以及项目符号编号等。下面我们就按这几部分如何用 Python 操作来一一介绍。
标题
文档标题创建比较简单,通过 Document()
创建出一个空白文档,只要调用 add_heading
方法就能创建标题。
# word_1.py
# 导入库
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn
# 新建空白文档
doc1 = Document()
# 新增文档标题
doc1.add_heading('如何使用 Python 创建 Word',0)
# 保存文件
doc1.save('word1.docx')
这样就完成了创建文档和文章标题的操作,下面通过命令 python word_1.py
运行程序,会生成名为 word1.docx
的文档,打开文章显示如下图所示:
标题
章节与段落
有了文章标题,下面我们来看章节和段落是怎么操作的,在上面代码后面增加章节和段落操作的代码如下:
# word_1.py
# 导入库
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn
# 新建空白文档
doc1 = Document()
# 新增文档标题
doc1.add_heading('如何使用 Python 创建 Word',0)
# 创建段落描述
doc1.add_paragraph('我们平时使用 Word 用来做文章的处理,可能没想过它可以用 Python 生成,下面我们就介绍具体如何操作……')
# 创建一级标题
doc1.add_heading('安装 python-docx 库',1)
# 创建段落描述
doc1.add_paragraph('现在开始我们来介绍如何安装 python-docx 库,具体需要以下两步操作:')
# 创建二级标题
doc1.add_heading('第一步:安装 Python',2)
# 保存文件
doc1.save('word1.docx')
上面我们说了 add_heading
方法用来增加文章标题,不过通过上面代码我们能知道,这个方法的第二上参数为数字,其实这个就是用来标示几级标题的,在我们平时就用来标示章节。add_paragraph
方法则是用来在文章中增加段落的,那我们现在就通过命令 python word_1.py
运行程序看下效果:
章节段落
字体和引用
前面我们通过 add_paragraph
方法增加了两个段落,现在我们就看下如何对段落中字体如何操作,以及引用段落的操作。继续修改以上代码,增加对文章字体字号、加粗、倾斜等操作,具体代码如下:
# word_1.py
# 导入库
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn
from docx.shared import RGBColor
# 新建空白文档
doc1 = Document()
# 新增文档标题
doc1.add_heading('如何使用 Python 创建 Word',0)
# 创建段落描述
doc1.add_paragraph('我们平时使用 Word 用来做文章的处理,可能没想过它可以用 Python 生成,下面我们就介绍具体如何操作……')
# 创建一级标题
doc1.add_heading('安装 python-docx 库',1)
# 创建段落描述
doc1.add_paragraph('现在开始我们来介绍如何安装 python-docx 库,具体需要以下两步操作:')
# 创建二级标题
doc1.add_heading('第一步:安装 Python',2)
# 创建段落,添加文档内容
paragraph = doc1.add_paragraph('这是第一步的安装描述!')
# 段落中增加文字,并设置字体字号
run = paragraph.add_run('(注意:这里设置了字号为20)')
run.font.size = Pt(20)
# 设置英文字体
run = doc1.add_paragraph('这里设置英文字体:').add_run('This Font is Times New Roman ')
run.font.name = 'Times New Roman'
# 设置中文字体
run = doc1.add_paragraph('这里设置中文字体:').add_run('当前字体为黑体')
run.font.name='黑体'
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'), '黑体')
# 设置斜体
run = doc1.add_paragraph('这段设置:').add_run('文字的是斜体 ')
run.italic = True
# 设置粗体
run = doc1.add_paragraph('这段再设置:').add_run('这里设置粗体').bold = True
# 设置字体带下划线
run = doc1.add_paragraph('这段为下划线:').add_run('这里设置带下划线').underline = True
# 设置字体颜色
run = doc1.add_paragraph('这段字体为红色:').add_run('这里设置字体为红色')
run.font.color.rgb = RGBColor(0xFF, 0x00, 0x00)
# 增加引用
doc1.add_paragraph('这里是我们引用的一段话:人生苦短,我用Python。', style='Intense Quote')
# 保存文件
doc1.save('word1.docx')
上面代码主要是针对段落字体的各种设置,每段代码都标有注释应该比较容易理解,现在通过命令 python word_1.py
运行程序看下效果:
字体引用
项目列表
我们平时在使用 Word 时,为了能展示更清晰,会用到项目符号和编号,将内容通过列表的方式展示出来,下面我们新建一个文件 word_2.py
并编写如下代码:
# word_2.py
# 导入库
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn
# 新建文档
doc2 = Document()
doc2.add_paragraph('哪个不是水果:')
# 增加无序列表
doc2.add_paragraph(
'苹果', style='List Bullet'
)
doc2.add_paragraph(
'香蕉', style='List Bullet'
)
doc2.add_paragraph(
'馄炖', style='List Bullet'
)
doc2.add_paragraph('2020年度计划:')
# 增加有序列表
doc2.add_paragraph(
'每周健身一天', style='List Number'
)
doc2.add_paragraph(
'学习50本书', style='List Number'
)
doc2.add_paragraph(
'减少加班时间', style='List Number'
)
# 保存文件
doc2.save('word2.docx')
现在通过命令 python word_2.py
运行程序看下效果:
项目列表
图片和表格
我们平时编辑文章时,插入图片和表格也是经常使用到的,那用 Python 该如何操作插入图片和表格?首先我们随便找了个图片,我这用了 Python 安装时的一张截图,文件名为 python_install.png
,然后在 word_2.py
文件中增加如下代码:
# word_2.py
# 导入库
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn
# 新建文档
doc2 = Document()
doc2.add_paragraph('哪个不是水果:')
# 增加无序列表
doc2.add_paragraph(
'苹果', style='List Bullet'
)
doc2.add_paragraph(
'香蕉', style='List Bullet'
)
doc2.add_paragraph(
'馄炖', style='List Bullet'
)
doc2.add_paragraph('2020年度计划:')
# 增加有序列表
doc2.add_paragraph(
'每周健身一天', style='List Number'
)
doc2.add_paragraph(
'学习50本书', style='List Number'
)
doc2.add_paragraph(
'减少加班时间', style='List Number'
)
doc2.add_heading('图片',2)
# 增加图像
doc2.add_picture('python_install.png', width=Inches(5.5))
doc2.add_heading('表格',2)
# 增加表格,这是表格头
table = doc2.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '编号'
hdr_cells[1].text = '姓名'
hdr_cells[2].text = '职业'
# 这是表格数据
records = (
(1, '张三', '电工'),
(2, '张五', '老板'),
(3, '马六', 'IT')
)
# 遍历数据并展示
for id, name, work in records:
row_cells = table.add_row().cells
row_cells[0].text = str(id)
row_cells[1].text = name
row_cells[2].text = work
# 手动增加分页
doc2.add_page_break()
# 保存文件
doc2.save('word2.docx')
OK,现在再来让我们再来看下效果:
图片表格
读取 Word 文件
上面写了很多用 Python 创建空白 Word 文件格式化字体并保存到文件中,接下来我们再简单介绍下如何读取已有的 Word 文件,请看如下代码:
# word_3.py
# 引入库
from docx import Document
# 打开文档1
doc1 = Document('word1.docx')
# 读取每段内容
pl = [ paragraph.text for paragraph in doc1.paragraphs]
print('###### 输出word1文章内容')
# 输出读取到的内容
for i in pl:
print(i)
# 打开文档2
doc2 = Document('word2.docx')
print('\n###### 输出word2文章内容')
pl2 = [ paragraph.text for paragraph in doc2.paragraphs]
# 输出读取到的内容
for j in pl2:
print(j)
# 读取表格材料,并输出结果
tables = [table for table in doc2.tables]
for table in tables:
for row in table.rows:
for cell in row.cells:
print (cell.text,end=' ')
print()
print('\n')
以上代码是将之前我们输出的两个文档内容都读取出来,当然这里只是打印到控制台,并没有做其他处理。现在我们来执行命令 python word_3.py
把代码执行看下结果:
读取并打印
总结
本文为大家介绍了 Python 中如何操作 Word 文档,其中写入文件时,我们常用各种标题段落字体设置等,会比较复杂,这里只是简单介绍了最常用的几种方法,如果想了解更多请参考文末官网介绍,之后会为大家介绍其他类型文件的操作方式,希望大家能多多关注。
相关文章:

Python 操作 Word
上次给大家介绍了 Python 如何操作 Excel ,是不是感觉还挺有趣的,今天为大家再介绍下,用 Python 如何操作 Word ,这个可能跟数据处理关系不大,用的也不多,不过可以先了解下都能实现什么功能,以备…...
Linux--进程创建(fork)-退出--孤儿进程
进程创建: ①使用fork函数创建一个进程,创建的新进程被称为子进程。 #include <unistd.h>//头文件 pid_t fork(void); fork函数调用成功,返回两次: 返回值为0, 代表当前进程为子进程; 返回值为非负数…...
LeetCode 热题 HOT 100:链表专题
LeetCode 热题 HOT 100:https://leetcode.cn/problem-list/2cktkvj/ 文章目录 2. 两数相加19. 删除链表的倒数第 N 个结点21. 合并两个有序链表23. 合并 K 个升序链表141. 环形链表142. 环形链表 II148. 排序链表160. 相交链表206. 反转链表234. 回文链表 2. 两数相…...

Redis发布订阅
在现代的软件开发中,数据存储和管理是至关重要的一环。Redis,作为一个开源的、内存中的数据结构存储系统,以其出色的性能和灵活的数据结构,赢得了开发者们的广泛喜爱。它不仅可以用作数据库,还可以用作缓存和消息代理。…...

在Windows操作系统上安装PostgreSQL数据库
在Windows操作系统上安装PostgreSQL数据库 一、在Windows操作系统上安装PostgreSQL数据库 一、在Windows操作系统上安装PostgreSQL数据库 点击 PostgreSQL可跳转至PostGreSQL的官方下载地址。 (1) (2)选择安装的目录ÿ…...

【云原生】Kubeadmin部署Kubernetes集群
目录 编辑 一、环境准备 1.2调整内核参数 二、所有节点部署docker 三、所有节点安装kubeadm,kubelet和kubectl 3.1定义kubernetes源 3.2开机自启kubelet 四、部署K8S集群 4.1查看初始化需要的镜像 4.2在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录…...

Java中wait和notify详解
线程的调度是无序的,随机的,但是也是有一定的需求场景,希望能够有序执行,join算是一种控制顺序的方式(功能有限)——》一个线程执行完,才能执行另一个线程! 本文主要讲解的…...

算法竞赛个人注意事项
浅浅记录一下自己在算法竞赛中的注意事项。 数据类 注意看数大小,数学库中的函数尽量加上 * 1.0,转成double,防止整型溢出。,int型相乘如果可能溢出,乘 * 1LL。 数据范围大于1e6,注意用快读。 浮点数输…...
ClickHouse和Doris超大数据集存储
文章目录 一. ClickHouse1. 性能2. 可靠性3. 可扩展性4. 支持SQL和复杂查询5. 适用场景 二. Doris1. 性能2. 可靠性3. 易用性4. 适用场景 三. ClickHouse和Doris的比较1. 架构2. 性能3. 可靠性4. 易用性5. 适用场景 四. 总结 ClickHouse和Doris是两种流行的超大数据集存储方案。…...

02-Flask-对象初始化参数
对象初始化参数 前言对象初始化参数import_namestatic_url_pathstatic_foldertemplate_floder 前言 本篇来学习Flask中对象初始化参数 对象初始化参数 import_name Flask程序所在的包(模块),传__name__就可以 _name_ 是一个标识 Python 模块的名字的变量&#x…...

第5篇 vue的通信框架axios和ui框架-element-ui以及node.js
一 axios的使用 1.1 介绍以及作用 axios是独立于vue的一个项目,基于promise用于浏览器和node.js的http客户端。 在浏览器中可以帮助我们完成 ajax请求的发送在node.js中可以向远程接口发送请求 1.2 案例使用axios实现前后端数据交互 1.后端代码 2.前端代码 &…...

RabbitMQ 知识点解读
1、AMQP 协议 1.1、AMQP 生产者的流转过程 当客户端与Broker 建立连接的时候,会调用factory .newConnection 方法,这个方法会进一步封装成Protocol Header 0-9-1 的报文头发送给Broker ,以此通知Broker 本次交互采用的是AMQPO-9-1 协议&…...

SimVODIS++: Neural Semantic Visual Odometry in Dynamic Environments 论文阅读
论文信息 题目:SimVODIS: Neural Semantic Visual Odometry in Dynamic Environments 作者:Ue-Hwan Kim , Se-Ho Kim , and Jong-Hwan Kim , Fellow, IEEE 时间:2022 来源: IEEE ROBOTICS AND AUTOMATION LETTERS(RAL…...

7.Xaml Image控件
1.运行图片 2.运行源码 a.xaml源码 <!--Source="/th.gif" 图像源--><!--Stretch="Fill" 填充模式--><Image x:Name...

Solidity 小白教程:11. 构造函数和修饰器
Solidity 小白教程:11. 构造函数和修饰器 这一讲,我们将用合约权限控制(Ownable)的例子介绍solidity语言中构造函数(constructor)和独有的修饰器(modifier)。 构造函数 构造函数&…...

静态工厂模式,抽象工厂模式,建造者模式
静态工厂模式 ublic class FruitFactory {public static Fruit getFruit(String name) {Fruit fnull;switch (name){case "APPLE":{fnew Apple();}case "BANANA":{fnew Banana();}default :{System.out.println("Unknown Fruit");}}return f;} …...

【动手学深度学习笔记】--门控循环单元GRU
文章目录 门控循环单元GRU1.门控隐状态1.1重置门和更新门1.2候选隐状态1.3隐状态 2.从零开始实现2.1读取数据2.2初始化模型参数2.3定义模型2.4训练与预测 3.简洁实现 门控循环单元GRU 学习视频:门控循环单元(GRU)【动手学深度学习v2】 官方…...

浅析linux异步io框架 io_uring
前言 Linux内核5.1支持了新的异步IO框架iouring,由Block IO大神也即Fio作者Jens Axboe开发,意在提供一套公用的网络和磁盘异步IO,不过io_uring目前在磁盘方面要比网络方面更加成熟。 目录 背景简介 io_uring 系统API liburing 高级特性…...
访问者模式的一个使用案例——文档格式转换
访问者模式的一个使用案例——文档格式转换 假设我们在开发一个文档编辑器,它支持多种不同的文档元素(如段落、图片、表格等),现在我们需要添加一个功能——将文档导出为 HTML 或 Markdown 格式。 这就是一个典型的访问者模式的…...

【MySql】数据库的聚合查询
写在最前面的话 哈喽,宝子们,今天给大家带来的是MySql数据库的聚合查询。在前面CRUD章节我们学习了表达式查询,表达式查询是针对列和列之间进行运算的,那么如果想在行和行之间进行运算,那么就需要用到聚合查询。聚合查…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...