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在命令行下使用google翻译(带语音)
Jan 16 Python
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
python中MySQLdb模块用法实例
Nov 10 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
简单了解django索引的相关知识
Jul 17 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
Python requests设置代理的方法步骤
Feb 23 Python
python模拟哔哩哔哩滑块登入验证的实现
Apr 24 Python
Python异常处理机制结构实例解析
Jul 23 Python
Python实现简繁体转换
Jun 07 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去除二维数组的重复项方法
2015/11/04 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
从javascript语言本身谈项目实战
2006/12/27 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
javascript中this指向详解
2016/04/23 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
python根据距离和时长计算配速示例
2014/02/16 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
python剪切视频与合并视频的实现
2020/03/03 Python
Python map及filter函数使用方法解析
2020/08/06 Python
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
同程旅游英文网站:LY.com
2018/11/13 全球购物
六道php面试题附答案
2014/06/05 面试题
物业保安主管岗位职责
2013/12/25 职场文书
护士自我评价
2014/02/01 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
英文商务邀请函范文
2015/01/31 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
golang DNS服务器的简单实现操作
2021/04/30 Golang