Python使用python-docx读写word文档


Posted in Python onAugust 26, 2019

python-docx库可用于创建和编辑Microsoft Word(.docx)文件。

官方文档:链接地址

备注:

doc是微软的专有的文件格式,docx是Microsoft Office2007之后版本使用,其基于Office Open XML标准的压缩文件格式,比 doc文件所占用空间更小。docx格式的文件本质上是一个ZIP文件,所以其实也可以把.docx文件直接改成.zip,解压后,里面的 word/document.xml包含了Word文档的大部分内容,图片文件则保存在word/media里面。

python-docx不支持.doc文件,间接解决方法是在代码里面先把.doc转为.docx。

一、安装包

pip3 install python-docx

二、创建word文档

下面是在官文示例基础上对个别地方稍微修改,并加上函数的使用说明

from docx import Document
from docx.shared import Inches
 
document = Document()
 
#添加标题,并设置级别,范围:0 至 9,默认为1
document.add_heading('Document Title', 0)
 
#添加段落,文本可以包含制表符(\t)、换行符(\n)或回车符(\r)等
p = document.add_paragraph('A plain paragraph having some ')
#在段落后面追加文本,并可设置样式
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
 
document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='Intense Quote')
 
#添加项目列表(前面一个小圆点)
document.add_paragraph(
 'first item in unordered list', style='List Bullet'
)
document.add_paragraph('second item in unordered list', style='List Bullet')
 
#添加项目列表(前面数字)
document.add_paragraph('first item in ordered list', style='List Number')
document.add_paragraph('second item in ordered list', style='List Number')
 
#添加图片
document.add_picture('monty-truth.png', width=Inches(1.25))
 
records = (
 (3, '101', 'Spam'),
 (7, '422', 'Eggs'),
 (4, '631', 'Spam, spam, eggs, and spam')
)
 
#添加表格:一行三列
# 表格样式参数可选:
# Normal Table
# Table Grid
# Light Shading、 Light Shading Accent 1 至 Light Shading Accent 6
# Light List、Light List Accent 1 至 Light List Accent 6
# Light Grid、Light Grid Accent 1 至 Light Grid Accent 6
# 太多了其它省略...
table = document.add_table(rows=1, cols=3, style='Light Shading Accent 2')
#获取第一行的单元格列表
hdr_cells = table.rows[0].cells
#下面三行设置上面第一行的三个单元格的文本值
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for qty, id, desc in records:
 #表格添加行,并返回行所在的单元格列表
 row_cells = table.add_row().cells
 row_cells[0].text = str(qty)
 row_cells[1].text = id
 row_cells[2].text = desc
 
document.add_page_break()
 
#保存.docx文档
document.save('demo.docx')

创建的demo.docx内容如下:

 Python使用python-docx读写word文档

三、读取word文档

from docx import Document
 
doc = Document('demo.docx')
 
#每一段的内容
for para in doc.paragraphs:
 print(para.text)
 
#每一段的编号、内容
for i in range(len(doc.paragraphs)):
 print(str(i), doc.paragraphs[i].text)
 
#表格
tbs = doc.tables
for tb in tbs:
 #行
 for row in tb.rows: 
 #列 
 for cell in row.cells:
 print(cell.text)
 #也可以用下面方法
 '''text = ''
 for p in cell.paragraphs:
 text += p.text
 print(text)'''

运行结果:

Document Title
A plain paragraph having some bold and some italic.
Heading, level 1
Intense quote
first item in unordered list
second item in unordered list
first item in ordered list
second item in ordered list
Document Title
A plain paragraph having some bold and some italic.
Heading, level 1
Intense quote
first item in unordered list
second item in unordered list
first item in ordered list
second item in ordered list
 
 
 
Qty
Id
Desc
101
Spam
422
Eggs
631
Spam, spam, eggs, and spam
[Finished in 0.2s]

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

Python 相关文章推荐
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
numpy.random模块用法总结
May 27 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
python性能测量工具cProfile使用解析
Sep 26 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
Python文件读写w+和r+区别解析
Mar 26 Python
使用Keras建立模型并训练等一系列操作方式
Jul 02 Python
降低python版本的操作方法
Sep 11 Python
去除python中的字符串空格的简单方法
Dec 22 Python
Python 实现定积分与二重定积分的操作
May 26 Python
Python Subprocess模块原理及实例
Aug 26 #Python
python自动循环定时开关机(非重启)测试
Aug 26 #Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 #Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 #Python
pywinauto自动化操作记事本
Aug 26 #Python
Python 实现的 Google 批量翻译功能
Aug 26 #Python
python自动化工具之pywinauto实例详解
Aug 26 #Python
You might like
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
php实现监听事件
2013/11/06 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
javascript计算对象长度的方法
2017/10/25 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
python把1变成01的步骤总结
2019/02/27 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
python getopt模块使用实例解析
2019/12/18 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
Python 使用office365邮箱的示例
2020/10/29 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
就业推荐表自我鉴定
2013/10/29 职场文书
个人简历中自我评价
2014/02/11 职场文书
校庆标语集锦
2014/06/25 职场文书
报名委托书
2015/01/29 职场文书
导游词格式
2015/02/13 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
任命书格式范文
2015/09/22 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python