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().cellsrow_cells[0].text = str(id)row_cells[1].text = namerow_cells[2].text = descdocument.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[行索引].cellsfor 列索引 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.rhkb.cn/news/484526.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot kafka在kafka server AUTH变动后consumer自动销毁

前言 笔者使用了kafka用来传输数据,笔者在今年10月写了文章,怎么使用配置化实现kafka的装载:springboot kafka多数据源,通过配置动态加载发送者和消费者-CSDN博客 不过在实际运行中,kafka broker是加密的&#xff0c…

Jupyter Lab打印日志

有时候在 jupyter 中执行运行时间较长的程序,且需要一直信息,但是程序执行到某些时候就不再打印了。 可以开启 日志控制台,将日志信息记录在控制台中。 参考:https://www.autodl.com/docs/jupyterlab/

EtherCAT转ProfiNet网关实现西门子1200PLC与伺服电机连接的通讯案例

一. 案例背景 西门子1200PLC通过捷米特JM-ECTM-PN(EtherCAT转ProfiNet)网关将松下伺服电机(包括不限于型号MHMFO22D1U2M)或EtherCAT协议的其它设备或连接到ProfiNetPLC上,并在正常运行中支持EtherCAT协议。本产品可作为EtherCAT主站,做为西门子S7-1200系…

Redis 基础、Redis 应用

Redis 基础 什么是 Redis? Redis (REmote DIctionary Server)是一个基于 C 语言开发的开源 NoSQL 数据库(BSD 许可)。与传统数据库不同的是,Redis 的数据是保存在内存中的(内存数据库&#xf…

Vue 组件通信全面解析

Vue 组件通信全面解析:方式、原理、优缺点及最佳实践 在 Vue 开发中,组件通信是一个重要的核心问题。随着应用复杂度的增加,如何在组件之间有效传递数据、触发事件,直接影响代码的可维护性和可扩展性。Vue 提供了多种组件通信方式…

Python-链表数据结构学习(1)

一、什么是链表数据? 链表是一种通过指针串联在一起的数据结构,每个节点由2部分组成,一个是数据域,一个是指针域(存放下一个节点的指针)。最后一个节点的指针域指向null(空指针的意思&#xff0…

电脑插入耳机和音响,只显示一个播放设备

1. 控制面板-硬件和声音-Realtek高清音频-扬声器-设备高级设置-播放设备里选择使用前部和后部输出设备同时播放两种不同的音频流 在声音设置中就可以看到耳机播放选项

ISAAC SIM踩坑记录--添加第三方3D场景

ISAAC SIM仿真首先就是要有合适的3D场景,官方提供了一些场景,如果不能满足要求,那就只能自己建。 对于我这种不会3D建模的菜鸟,只能到网上下载了,sketchfab就是一个不错的平台,有不少免费资源可以下载。 …

CentOS 9 配置静态IP

文章目录 1_问题原因2_nmcli 配置静态IP3_使用配置文件固定IP4_重启后存在的问题5_nmcli 补充 1_问题原因 CentOS 7 于 2014年6月发布,基于 RHEL 7,并在 2024年6月30日 结束维护。 CentOS 9 作为目前的最新版本,今天闲来闲来无事下载下来后…

C++趣味编程玩转物联网:基于树莓派Pico控制无源蜂鸣器-实现音符与旋律的结合

无源蜂鸣器是一种多功能的声音输出设备,与有源蜂鸣器相比,它能够通过不同频率的方波生成丰富多样的音调。本项目使用树莓派Pico开发板,通过编程控制无源蜂鸣器播放经典旋律《归来有风》。本文将详细介绍项目实现中的硬件连接、C++代码解析,以及无源蜂鸣器的工作原理。 一、…

【AI模型对比】Kimi与ChatGPT的差距:真实对比它们在六大题型中的全面表现!

文章目录 Moss前沿AI语义理解文学知识数学计算天文学知识物理学知识英语阅读理解详细对比列表总结与建议 Moss前沿AI 【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!! 【VScode】VSCode中的智能AI-G…

Runway 技术浅析(六):文本到视频(Text-to-Video)

1. 核心组件与工作原理 1.1 自然语言处理(NLP) 1.1.1 文本解析与语义理解 文本到视频的第一步是将用户输入的自然语言文本解析为机器可理解的语义信息。Runway 使用预训练的 NLP 模型,如 GPT-3 和 BERT,这些模型通过大规模文本数…

【C++】双温度转换与并联电阻计算的编程题分析与优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯从华氏温度到摄氏温度的转换题目背景与华氏温度与摄氏温度的转换初始代码与验证通过的解法代码分析特点与优缺点 老师的代码:结合 C 与 C 的风格代码分析与对比…

【采样率、采样定理、同步和异步采样】

内容来源:【数据采集卡的【采样率】【采样定理】【同步采样】【异步采样】的相关说明】 此篇文章仅作笔记分享。 前言 模拟信号需要通过采样、储存、量化、编码这几个步骤转换成数字信号,本篇文章将会对采样进行一个更详细的说明。 采样 采样就是将一…

笔记本电脑usb接口没反应怎么办?原因及解决方法

笔记本电脑的USB接口是我们日常使用中非常频繁的一个功能,无论是数据传输、充电还是外接设备,都离不开它。然而,当USB接口突然没有反应时,这无疑会给我们的工作和学习带来不小的困扰。下面,我们就来探讨一下笔记本USB接…

linux运维之shell编程

Shell 编程在系统运维中及其重要 1. Shell 编程概述 Shell 是一种命令行解释器,能够执行操作系统的命令。Shell 脚本是一个包含一系列 Shell 命令的文件,它可以被执行,以自动化和批量处理任务。常用的 Shell 类型包括 bash、sh、zsh 等。Shel…

怎么自己创建一个网站? 开发语言首选 java,使用CMS网站内容管理系统是不错的选择

怎么自己创建一个网站 推荐使用 Java CMS 网站内容管理系统,根据网站规划的功能模块,创建不同的页面风格; 文章目录 怎么自己创建一个网站一、规划网站1.1确定网站主题和目的1.2规划网站结构和内容 二、注册域名2.1选择域名注册商2.2 查找并…

小米澎湃OS2跟蜂窝网络相关的设置和调试【功能设计】

界面功能 开发者模式下,支持数据和WLAN网络相关的设置,跟数据有关的主要如下: 蜂窝网络调试 > 5G-A 特性中心始终开启移动数据网络(便于WiFi和数据快速切换,在国外北美运营商有些需求中明确定义要开着&#xff09…

八、Python —— 类、异常处理、模块、包的管理、虚拟环境

文章目录 一、类1.1、类的定义1.2、类变量和实例变量1.3、类的继承 二、异常处理三、模块 和 包3.1、模块和包的概念,以及项目的树形结构3.2、模块和包的使用 (from import)方法一:from 模块 import 变量/函数/类方式二:from 模块 import 变量…

【text2sql】低资源场景下Text2SQL方法

SFT使模型能够遵循输入指令并根据预定义模板进行思考和响应。如上图,、 和 是用于通知模型在推理过程中响应角色的角色标签。 后面的内容表示模型需要遵循的指令,而 后面的内容传达了当前用户对模型的需求。 后面的内容代表模型的预期输出,也…