python使用docx模块读写docx文件的方法与docx模块常用方法详解


Posted in Python onFebruary 17, 2020

一,docx模块

Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。

二,相关概念

如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解python-docx模块的几个概念。

1,Document对象,表示一个word文档。

2,Paragraph对象,表示word文档中的一个段落

3,Paragraph对象的text属性,表示段落中的文本内容。

三,模块的安装和导入

需要注意,python-docx模块安装需要在cmd命令行中输入pip install python-docx,如下图表示安装成功(最后那句英文Successfully installed,成功地安装完成)

注意在导入模块时,用的是import docx。

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH #设置对象居中、对齐等。
from docx.enum.text import WD_TAB_ALIGNMENT,WD_TAB_LEADER #设置制表符等
from docx.shared import Inches #设置图像大小
from docx.shared import Pt #设置像素、缩进等
from docx.shared import RGBColor #设置字体颜色
from docx.shared import Length #设置宽度

四,读取word文本

#-*- conding:utf-8 -*-

import docx


file=docx.Document(r"F:\python从入门到放弃\7\2\wenjian.docx")

print('段落:'+str(len(file.paragraphs)))
# 
# for para in file.paragraphs:
#  print(para.text)
 
for i in range(len(file.paragraphs)): 
 print("第"+str(i)+"段的内容是:"+file.paragraphs[i].text)

五,写word文本

#-*- conding:utf-8 -*-

import sys

from docx import Document
from docx.shared import Inches

def main():
#  reload(sys)
#  sys.setdefaultencoding('utf-8')
 
 # 创建文档对象
 document = Document()
 
 # 设置文档标题,中文要用unicode字符串
 document.add_heading(u'我的一个新文档',0)
 
 # 往文档中添加段落
 p = document.add_paragraph('This is a paragraph having some ')
 p.add_run('bold ').bold = True
 p.add_run('and some ')
 p.add_run('italic.').italic = True
 
 # 添加一级标题
 document.add_heading(u'一级标题, level = 1',level = 1)
 document.add_paragraph('Intense quote',style = 'IntenseQuote')
 
 # 添加无序列表
 document.add_paragraph('first item in unordered list',style = 'ListBullet')
 
 # 添加有序列表
 document.add_paragraph('first item in ordered list',style = 'ListNumber')
 document.add_paragraph('second item in ordered list',style = 'ListNumber')
 document.add_paragraph('third item in ordered list',style = 'ListNumber')
 
 # 添加图片,并指定宽度
 document.add_picture('cat.png',width = Inches(2.25))
 
 # 添加表格: 1行3列
 table = document.add_table(rows = 1,cols = 3)
 # 获取第一行的单元格列表对象
 hdr_cells = table.rows[0].cells
 # 为每一个单元格赋值
 # 注:值都要为字符串类型
 hdr_cells[0].text = 'Name'
 hdr_cells[1].text = 'Age'
 hdr_cells[2].text = 'Tel'
 # 为表格添加一行
 new_cells = table.add_row().cells
 new_cells[0].text = 'Tom'
 new_cells[1].text = '19'
 new_cells[2].text = '12345678'
 
 # 添加分页符
 document.add_page_break()
 
 # 往新的一页中添加段落
 p = document.add_paragraph('This is a paragraph in new page.')
 
 # 保存文档
 document.save('demo1.doc')
 
if __name__ == '__main__':
 main()

六,读取表格

#-*- conding:utf-8 -*-

import docx

doc = docx.Document('wenjian.docx')
for table in doc.tables: # 遍历所有表格
 print('----table------')
 for row in table.rows: # 遍历表格的所有行
  # row_str = '\t'.join([cell.text for cell in row.cells]) # 一行数据
  # print row_str
  for cell in row.cells:
   print(cell.text, '\t',)
  print() #换行

七,添加段落

document=docx.Document() # 创建一个空白文档
document.styles['Normal'].font.name = '宋体' # 设置西文字体
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体') # 设置中文字体 
p = document.add_paragraph()	# 添加一个段落
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY	#	设置对齐方式
p.paragraph_format.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE	#	设置行间距
p.paragraph_format.space_after = Pt(0)	#	设置段后间距 
run = p.add_run('content')	#	延长段落
run.font.color.rgb = RGBColor(255, 0, 0)	#	设置字体颜色
run.font.size = Pt(22) # 设置字号
run.font.bold = True #	设置下划线

八,docx模块其它常用方法

字号与磅值的关系

字号 磅值
八号 5
七号 5.5
小六 6.5
六号 7.5
小五 9
五号 10.5
小四 12
四号 14
小三 15
三号 16
小二 18
二号 22
小一 24
一号 26
小初 36
初号 42

新增页眉

section=document.sections[0]
header=section.header
bt1=header.paragraphs[0]
bt1.text='此处是页眉1'

新增头信息

t1=document.add_paragraph('此处Tetle信息','Title')

新增段落 及 向前插入段落

p1=document.add_paragraph('新增段落P1')
pin1=p1.insert_paragraph_before('在p1前插入段落pin1')

段落里设置参数样式 或 指定.style来设置参数

p2=document.add_paragraph('新增段落p2并设置style类型',style='ListBullet')
p3=document.add_paragraph('新增段落p3并指定style类型')
p3.style='ListBullet'

添加标题 可设置标题级别1-9

h1=document.add_heading('此处默认标题1')
h2=document.add_heading('此处添加标题2',level=2)
h3=document.add_heading('此处添加标题3',level=3)

设置字体

通过.add_run来设置字体: 加粗、斜体、大小、颜色、下划线

paragraph=document.add_paragraph()
r1=paragraph.add_run('通过.bold=True来设置粗体')
r1.bold=True
r1.style='Emphasis'
r2=paragraph.add_run('也可以')
r3=paragraph.add_run('\n通过.italic=True来设置斜体,\n通过.font.size来设置字体大小,\n通过.font.color.rgb=RGBColor来设置字体颜色')
r3.italic=True
r3.font.size=Pt(20)
r3.font.color.rgb=RGBColor(200,77,150)
方法 作用
all_caps 全部大写字母
bold 加粗
color 字体颜色
complex_script 是否为“复杂代码”
cs_bold “复杂代码”加粗
cs_italic “复杂代码”斜体
double_strike 双删除线
emboss 文本以凸出页面的方式出现
hidden 隐藏
imprint 印记
italic 斜体
name 字体
no_proof 不验证语法错误
outline 显示字符的轮廓
shadow 阴影
small_caps 小型大写字母
snap_to_grid 定义文档网格时对齐网络
strike 删除线
subscript 下标
superscript 上标
underline 下划线

设置居中、左右对齐、缩进、制表符

p4=document.add_paragraph('准备开始设置居中、左右对齐、缩进等')
p4.paragraph_format.alignment=WD_ALIGN_PARAGRAPH.CENTER
方法 作用
LEFT 左对齐
CENTER 文字居中
RIGHT 右对齐
JUSTIFY 本两端对齐

设置缩进

默认Inches(0.5)等于四个空格

p5=document.add_paragraph('content')
p5.paragraph_format.left_indent=Inches(0.5)

设置首行缩进

p5.paragraph_format.first_line_indent=Inches(0.5)

设置段落间距 分为段落前 和 段落后

p5.paragraph_format.space_before=Pt(30)
p5.paragraph_format.space_after=Pt(12)

设置段落行距当行距为最小值和固定值时,设置值单位是磅,用Pt;当行间距为多倍行距时,设置值为数值。

p5.paragraph_format.line_spacing=Pt(30)
方法 作用
SINGLE 单倍行距(默认)
ONE_POINT_FIVE 1.5倍行距
DOUBLE 2倍行距
AT_LEAST 最小值
EXACTLY 固定值
MULTIPLE 多倍行距
paragraph.line_spacing_rule = WD_LINE_SPACING.EXACTLY #固定值
paragraph_format.line_spacing = Pt(18)     # 固定值18磅
paragraph.line_spacing_rule = WD_LINE_SPACING.MULTIPLE #多倍行距
paragraph_format.line_spacing = 1.75

分页属性

p5.paragraph_format.keep_with_next = True
方法 作用 说明
widow_control 孤行控制 防止在页面顶端单独打印段落末行或在页面底端单独打印段落首行
keep_with_next 与下段同页 防止在选中段落与后面一段间插入分页符
page_break_before 段前分页 在选中段落前插入分页符
keep_together 段中不分页 防止在段落中出现分页符

添加分页符

document.add_page_break()
p5=document.add_paragraph('.add_page_break()硬分页,即使文本未满')

添加表格、设置表格样式

table=document.add_table(rows=2,cols=2) 
table.style='LightShading-Accent1'

选择表格内单元格、单元格赋值添加和改变内容

cell=table.cell(0,1)
cell.text='通过cell.text()来添加内容'

选择表格的行,通过索引,然后索引单元格

row=table.rows[1]
row.cells[0].text='通过.add_table(,)来添加表格'
row.cells[1].text='通过for row in table.rows内嵌套 for cell in row.cells来循环输出表格内容'

for循环逐行输出表格内容

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

len表格内行列数

row_count=len(table.rows)
col_count=len(table.columns)
print(row_count,col_count,'现表格行列数')
row=table.add_row() #逐步添加行
print(len(table.rows),len(table.columns),'添加后表格行列数')

添加另一个表格 及 指定表格样式

table1=document.add_table(1,3)
table1.style='LightShading-Accent2' #设置表格样式

填充 标题行

heading_cells=table1.rows[0].cells #获取 行列标
heading_cells[0].text='Qtx' #为行列表内的cell单元格 赋值
heading_cells[1].text='Sku'
heading_cells[2].text='Des'

表格数据

items=(
  (7,'1024','plush kitens'),
  (3,'2042','furbees'),
  (1,'1288','french poodle collars,deluxe')
  )

为每个项目添加数据行

for item in items:
 cells=table1.add_row().cells
 cells[0].text=str(item[0]) 
 cells[1].text=str(item[1]) 
 cells[2].text=str(item[2])

添加图片

document.add_picture('002592.png',width=Inches(2))

调整图片大小,如下:

document.add_picture('demo.png', width=Inches(1.0), height=Inches(1.0))

若同时定义宽度和高度,则图片会被拉伸或压缩到指定大小;若仅定义宽度或高度,则图会自适应调整大小。

保存文档

document.save('test.docx')

更多关于python使用docx模块读写docx文件的方法与docx模块常用方法请查看下面的相关链接

Python 相关文章推荐
跟老齐学Python之有点简约的元组
Sep 24 Python
Python内置函数OCT详解
Nov 09 Python
python: 判断tuple、list、dict是否为空的方法
Oct 22 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
pycham查看程序执行的时间方法
Nov 29 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
Django 创建新App及其常用命令的实现方法
Aug 04 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
Feb 12 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
python itsdangerous模块的具体使用方法
Feb 17 #Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 #Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
Feb 17 #Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 #Python
Python cookie的保存与读取、SSL讲解
Feb 17 #Python
Python中用pyinstaller打包时的图标问题及解决方法
Feb 17 #Python
Python交互环境下打印和输入函数的实例内容
Feb 16 #Python
You might like
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
2012/07/31 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
php验证码生成器
2017/05/24 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
python Opencv将图片转为字符画
2021/02/19 Python
python截取两个单词之间的内容方法
2018/12/25 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
.NET方向面试题
2014/11/20 面试题
内刊编辑求职自荐书范文
2014/02/19 职场文书
百年校庆节目主持词
2014/03/27 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
68句权威创业名言
2019/08/26 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers