当前位置: 首页 > article >正文

python使用python-docx处理word

文章目录

  • 一、python-docx简介
  • 二、基本使用
    • 1、新建与保存word
    • 2、写入Word
      • (1)打开文档
      • (2)添加标题
      • (3)添加段落
      • (4)添加文字块
      • (5)添加图片
      • (6)添加表格
      • (7)添加分页符
    • 3、读取word

一、python-docx简介

python自动化操作Word最常用的模块就是python-docx。

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

如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解python-docx模块的几个概念。
Word文档一般可以结构化成三个部分:
Document,表示一个word文档
Paragraph,表示word文档中的一个段落
Run,表示段落中的文字块
在这里插入图片描述
Document - Paragraph - Run三级结构,这是最普遍的情况。但是如果Word中存在表格,这时会有新的文档结构,如下:
在这里插入图片描述
这时的结构非常类似Excel, 可以看成Document-Table-Row/Column-Cells四级结构。

# 安装
pip install python-docx

二、基本使用

1、新建与保存word

from docx import Document
document = Document() #创建一个空文档
document.save(r'D:\自动化\word\道德经.docx') # 保存文件

2、写入Word

from docx import Document # 导入docx库
from docx.shared import Inches, Cm # 导入英寸单位 厘米Cm (可用于指定图片大小、表格宽高等)

# 打开一个document
file_path = r'D:\自动化\word\道德经.docx'
document = Document(file_path)

# 设置标题段落
document.add_heading('道德经', 0)

# 添加段落
p = document.add_paragraph('道可道,非常道;名可名,非常名。')
p.add_run('无名,天地之始,').bold = True # 在指定段落后添加粗体文字
p.add_run('有名,') # 在指定段落后添加默认格式文字
p.add_run('万物之母。').italic = True # 在指定段落后添加斜体文字

# 添加1级标题=标题1
document.add_heading('故常无欲,', level=1)

# 添加指定格式段落 style后面则是样式
document.add_paragraph('以观其妙,', style='Intense Quote')
# 添加段落,样式为List Bullet类型
document.add_paragraph('常有欲,以观其徼。', style='List Bullet')
# 添加段落,样式为List Number类型
document.add_paragraph('此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。', style='ListNumber')
document.add_paragraph('所以说,霸夫老师教Python,教得妙。', style='List Number')

# 添加图片
img_path = r'D:\自动化\word\girl.png'
document.add_picture(img_path)
document.add_picture(img_path, width=Inches(1.25))
document.add_picture(img_path, width=Cm(5), height=Cm(5))

# 待添加到表格的内容
records = (
	(1, '李白', '诗仙'),
	(2, '杜甫', '诗圣'),
	(3, '白居易', '香山居士, 与元稹并称元白, 与刘禹锡合称刘白')
)

# 添加一个1行3列的表格, 表格样式为Table Grid
# 表格样式参数可选,缺省时为Normal Table
# 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='Table Grid')
# 填充标题行
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '序号'
hdr_cells[1].text = '姓名'
hdr_cells[2].text = '描述'

# 动态添加数据行
for id, name, desc in records:
	row_cells = table.add_row().cells
	row_cells[0].text = str(id)
	row_cells[1].text = name
	row_cells[2].text = desc

document.add_paragraph('再添加一个表格')
# 待添加到表格的内容
records2 = [
	["姓名", "性别", "家庭地址"],
	["貂蝉", "女", "河北省"],
	["杨贵妃", "女", "贵州省"],
	["西施", "女", "山东省"]
]

# 添加一个4行3列的表格
table2 = document.add_table(rows=4, cols=3, style='Light List Accent 5')

# 填充表格
for 行索引 in range(4):
	cells = table2.rows[行索引].cells
	for 列索引 in range(3):
		cells[列索引].text = str(records2[行索引][列索引])
# 添加分页符
document.add_page_break()
# 保存文档
document.save(file_path)

(1)打开文档

Document()传入参数是打开相应的文档,不传参数则是创建一个空文档。

# 创建一个空文档
document = Document()
# 加载旧文档(用于修改或添加内容)
document = Document('exist.docx')

(2)添加标题

level等级1-9 也就是标题1-标题9,我们可以在旧文档中将标题格式设置好,使用Python-docx打开旧文档,再添加相应等级标题即可。

document.add_heading('一级标题', level=1)

(3)添加段落

段落在 Word 中是基本内容。它们用于正文文本,也用于标题和项目列表(如项目符号)。
添加段落的时候,赋值给一个变量,方便我们后面进行格式调整。

p = document.add_paragraph('道可道,非常道;名可名,非常名。')
# 添加指定格式段落 style后面则是样式
document.add_paragraph('以观其妙,', style='Intense Quote')

(4)添加文字块

在指定段落上添加文字块。

p.add_run('无名,天地之始,').bold = True # 在指定段落后添加粗体文字
p.add_run('有名,') # 在指定段落后添加默认格式文字
p.add_run('万物之母。').italic = True # 在指定段落后添加斜体文字

(5)添加图片

width, height可用于设置图片尺寸,缺省时为图片默认大小。

document.add_picture('girl.png')
document.add_picture('girl.png', width=Inches(1.25))
document.add_picture('girl.png', width=Cm(5), height=Cm(5))

(6)添加表格

表格样式style参数可选,缺省时默认为Normal Table。
常用样式有:
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

# 添加一个4行3列的表格
table = document.add_table(rows=4, cols=3)
table = document.add_table(rows=4, cols=3, style='Light Shading Accent 2')

(7)添加分页符

# 添加分页符
document.add_page_break()

3、读取word

'''
文档.paragraphs可以获取文档中所有段落数据,不包含表格,这里注意一点图片跟分页符也会计算在段落数据内
段落.runs 可以获取段落的所有文字块
文档.tables可以获取文档中所有表格数据
文档.save (path) 可以用于保存修改后的文档本身,同样也可在将打开的文档另存为新文档
'''
from docx import Document
doc = Document(r'D:\自动化\word\道德经.docx')

# 读取 word 中所有内容
for p in doc.paragraphs:
	print(p, p.text)

# 读取指定段落中的所有run
for run in doc.paragraphs[1].runs:
	print(run, run.text)

# 读取 word中所有表格内容
for 表格 in doc.tables:
	print(表格)
	forin 表格.rows:
		for 单元格 in.cells:
			print(单元格.text)

doc.save(r'D:\自动化\word\另存为新文档.docx')


http://www.kler.cn/a/421276.html

相关文章:

  • 三步入门Log4J 的使用
  • 极兔速递开放平台快递物流查询API对接流程
  • 【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)
  • spring boot mapper测试类优化
  • C++ 分治
  • 重学设计模式-工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
  • brynet源码阅读——http组件和wrapper组件
  • Reinforcement Learning with Human in the Loop Human Feedback
  • 【漏洞复现】海信智能公交企业管理系统 apply.aspx SQL注入漏洞
  • SIMD与SIMT
  • 刷leetcode hot100--3贪心(30min,看思路)
  • 【数据结构】【线性表】特殊的线性表-字符串
  • Android中使用NSD扫描,实现局域网内设备IP的发现
  • 第1章:CSS简介 --[CSS零基础入门]
  • Scala 的match case 匹配元组
  • zerotier实现内网穿透
  • M31系列LoRa分布式IO模块功能简介
  • 黑马2024AI+JavaWeb开发入门Day04-SpringBootWeb入门-HTTP协议-分层解耦-IOCDI飞书作业
  • 【微服务】SpringBoot 对接飞书多维表格事件回调监听流程详解
  • 基于Linux的逻辑订阅发布搭建
  • 多线程运行时,JVM(Java虚拟机)的内存模型
  • Runway 技术浅析(七):视频技术中的运动跟踪
  • [TLS] 使用 OpenSSL 命令行测试 TLS13 0-RTT
  • 关于机器学习领域的预测算法/模型基础入门
  • 【论文笔记】Frequency Domain Model Augmentation for Adversarial Attack
  • BioDeepAV:一个多模态基准数据集,包含超过1600个深度伪造视频,用于评估深度伪造检测器在面对未知生成器时的性能。