python中可以处理word文档的模块:docx模块

news2024/12/29 10:46:02

前言

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

话不多说,直接开搞,如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码

一.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。

四.读取word文本

在了解了上面的信息之后,就很简单了,下面先创建一个D:\temp\word.docx文件,并在其中输入如下内容。

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)  
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()

读取表格:

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() #换行

首先是用docx.Document打开对应的文件目录。

docx文件的结构比较复杂,分为三层,

  • Docment对象表示整个文档;

  • Docment包含了Paragraph对象的列表,Paragraph对象用来表示文档中的段落;

  • 一个Paragraph对象包含Run对象的列表。

因此p.text会打印出整个的文本文档。

而用doc.tables来遍历所有的表格。

并且对每个表格通过遍历行,列的方式来得到所有的内容。

但是在运行结果中并没有找到我们插入的文件对象和图片,text.txt文档。

这部分该如何解析呢?

首先我们需要先来认识下docx文档的格式组成:

  • docx是Microsoft Office2007之后版本使用的,

    用新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,

    在传统的文件名扩展名后面添加了字母“x”(即“.docx”取代“.doc”、“.xlsx”取代“.xls”、“.pptx”取代“.ppt”)。

  • docx格式的文件本质上是一个ZIP文件。

    将一个docx文件的后缀改为ZIP后是可以用解压工具打开或是解压的。

    事实上,Word2007的基本文件就是ZIP格式的,他可以算作是docx文件的容器。

  • docx 格式文件的主要内容是保存为XML格式的,但文件并非直接保存于磁盘。

    它是保存在一个ZIP文件中,然后取扩展名为docx。

    将.docx 格式的文件后缀改为ZIP后解压, 可以看到解压出来的文件夹中有word这样一个文件夹,它包含了Word文档的大部分内容。

    而其中的document.xml文件则包含了文档的主要文本内容

从上面的文档我们可以了解到docx文档实际上是由XML文档打包组成的。

那么我们要得到其中所有的部分,可以用ZIP解压的方式来得到所有的部件。

我们先试下看是否可以

1 将docx文档改成ZIP的后缀

2 解压文件

解压之后得到如下几个文件

点开word文件夹:有如下的文件夹。

( document.xml就是描述文本对象的文件 )

其中embeddings文件中就是我们插入的文本对象text.txt. 是一个bin文件

Media文件中就是存储的图片:

我们通过手动的方式将插入的文本以及图片解析出来,那么通过代码也是同样可以解析的。

代码如下:

os.chdir(r'E:\py_prj')  #首先改变目录到文件的目录

os.rename('test.docx','test.ZIP')  # 重命名为zip文件

f=zipfile.ZipFile('test.zip','r')  #进行解压

for file in f.namelist():

    f.extract(file)

file=open(r'E:\py_prj\word\embeddings\oleObject1.bin','rb').read() #进入文件路径,读取二进制文件。

for f in file:

    print (f)

通过上面的方式,就可以将docx中插入的文件以及图片全部解析出来。

具体docx的写的方式可以参考官方文档的介绍

尾语 💝

好了,今天的分享就差不多到这里了!

文章提供的十二道编程题,大家都可以自己研究研究,有不理解的地方也是可以点击文章名片领取解答和大量的学习资料以及部分案例的源码哦

对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/898820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设备文件和设备绑定

实验目的&#xff1a;使用函数让设备文件和设备绑定&#xff0c;完成对LED的简单控制 在test.c中完成硬件逻辑控制 test.c #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #inclu…

openGauss学习笔记-44 openGauss 高级数据管理-存储过程

文章目录 openGauss学习笔记-44 openGauss 高级数据管理-存储过程44.1 语法格式44.2 参数说明44.3 示例 openGauss学习笔记-44 openGauss 高级数据管理-存储过程 存储过程是能够完成特定功能的SQL语句集。用户可以进行反复调用&#xff0c;从而减少SQL语句的重复编写数量&…

eUICC 识别号 (EIN)

GSMA 是业界指定的一级 EID&#xff08;eUICC 标识符&#xff09;分配机构&#xff0c;负责协调 eUICC 标识号的发行和使用。每个 eSIM 都需要具有唯一、持久且安全的 EID&#xff0c;以识别嵌入式或可移动 eUICC&#xff0c;如SGP.29中所定义。 GSMA eUICC 身份方案为每个 eUI…

“智能查单轻松实现批量快递查询,高效掌握快递物流信息!“

亲爱的用户&#xff0c;你是否常常为了查询大量快递单号而感到烦恼&#xff1f;不用担心&#xff0c;我们已经为你提供了一种高效、智能的解决方案&#xff01;现在&#xff0c;只需一键操作&#xff0c;即可实现批量快递查询&#xff0c;迅速了解每个单号的详细物流信息。 首…

网络编程(基础)

一、OSI体系结构 ISO&#xff08;国际标准化组织&#xff09;制定了一个国际标准OSI&#xff08;开放式通讯系统互联参考模型&#xff09;&#xff0c;对通讯系统进行了标准化。 定义了7层模型&#xff1a; 二、TCP/IP协议介绍 OSI模型是一个理想化的模型已经很少使用&#x…

git merge规则

参考文档&#xff1a;https://juejin.cn/post/7129333439299321887 丹尼尔&#xff1a;Hi&#xff0c;蛋兄&#xff0c;周杰伦都出新专辑了&#xff0c;你咋还不更新啊&#xff0c;真的打算半年一更啊&#xff1f; 蛋先生&#xff1a;好像确实是这样&#xff0c;要不&#xff0…

【机器学习】— 2 图神经网络GNN

一、说明 在本文中&#xff0c;我们探讨了图神经网络&#xff08;GNN&#xff09;在推荐系统中的潜力&#xff0c;强调了它们相对于传统矩阵完成方法的优势。GNN为利用图论来改进推荐系统提供了一个强大的框架。在本文中&#xff0c;我们将在推荐系统的背景下概述图论和图神经网…

在“听得懂”之后“看得见、动起来”,实在智能首发“你说PC做”的大模型Agent

大洋彼岸种下了一颗AI的种子&#xff0c;拥有“算力魔法”的ChatGPT在海内外掀起一场“大”爆发——大型语言模型爆发&#xff0c;带动了AI大模型技术的新热潮。 “你问我答”的不仅是ChatGPT上的交互形态&#xff0c;更是一张名为“大模型”的问卷&#xff0c;答的是全球人工…

Python可视化在量化交易中的应用(13)_Seaborn直方图

Seaborn中带核密度的直方图的绘制方法 seaborn中绘制直方图使用的是sns.histlot()函数&#xff1a; sns.histplot(data,x,y,hue,weights,stat‘count’,bins‘auto’,binwidth,binrange,discrete,cumulative,common_bins,common_norm,multiple‘layer’,element‘bars’,fill,…

如何解决使用npm出现Cannot find module ‘XXX\node_modules\npm\bin\npm-cli.js’错误

遇到问题&#xff1a;用npm下载组件时出现Cannot find module ‘D&#xff1a;software\node_modules\npm\bin\npm-cli.js’ 问题&#xff0c;导致下载组件不能完成。 解决方法&#xff1a;下载缺少的npm文件即可解决放到指定node_modules目录下即可解决。 分析问题&#xff1…

KubeSphere 社区双周报 | Java functions framework 支持 SkyWalking | 2023.8.4-8.17

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.08.04-2023.…

CPU执行程序的三个阶段简单示例(取指,解码,执行)

基础知识 RAM&#xff1a;RAM是随机存取存储器&#xff08;random access memory&#xff09;&#xff0c;是计算机内部存储器中的一种&#xff0c;也是其中最重要的&#xff0c;计算机和手机中一般把其叫做&#xff08;运行&#xff09;内存&#xff0c;它的速度要比硬盘快得多…

JDK8知识点梳理

JDK8知识点梳理 一、lambda表达式1.标准格式2.实现原理3.省略模式4.前提条件 二、函数式接口1.函数式接口&#xff1a;FunctionalInterface2.接口默认方法3.接口静态方法4.供给型接口&#xff1a;Supplier5.消费型接口&#xff1a;Consumer6.消费供给型接口&#xff1a;Functio…

Redis中的分布式锁及其延生的问题

前言 本文将着重介绍Redis中的分布式锁及其与出现的死锁和锁误删问题 什么是分布式锁 首先问题就是什么是分布式锁&#xff0c;分布式锁就是分布式系统中实现并发控制的一种锁机制&#xff0c;它可以保证多个节点在同一个时间只有有一个能成功竞争到系统资源&#xff08;共享…

[oneAPI] 使用序列到序列网络和注意力进行翻译

[oneAPI] 使用序列到序列网络和注意力进行翻译 oneAPI特殊写法使用序列到序列网络和注意力进行翻译Intel Optimization for PyTorch导入包加载数据并对数据进行处理序列到序列网络和注意力模型与介绍编码器解码器简单解码器注意力解码器 训练过程准备训练数据训练模型可视化注意…

Ubuntu在自己的项目中使用pcl

1、建立一个文件夹&#xff0c;如pcl_demos&#xff0c;里面建立一个.cpp文件和一个cmake文件 2、打开终端并进入该文件夹下&#xff0c;建立一个build文件夹存放编译的结果并进入该文件夹 3、对上一级进行编译 cmake .. 4、生成可执行文件 make 5、运行该可执行文件 6、可视…

STL——stack和queue

一、stack和queue stl中提供了栈和队列配接器供我们使用&#xff0c;以后就可以直接使用了。不需要我们自己造轮子。 使用细节参考文档就可以&#xff0c;与之学过的容器并无二致。栈和队列的特性我们再学习数据结构时已经了解了。这里就不在赘述了。 stack - C Reference (…

FifthOne:计算机视觉提示和技巧

一、说明 欢迎来到我们每周的FiftyOne提示和技巧博客&#xff0c;我们回顾了最近在Slack&#xff0c;GitHub&#xff0c;Stack Overflow和Reddit上弹出的问题和答案。FiftyOne是一个开源机器学习工具集&#xff0c;使数据科学团队能够通过帮助他们策划高质量数据集、评估模型、…

Games 103 作业一

Games 103 作业一 整个作业一的内容其实就是要自己动手实现一遍Impulse和Shape Matching这两个方法。作业中给的示例场景如下&#xff1a; 场景中有个兔子的刚体&#xff0c;我们要模拟的就是给兔子一个初始的速度&#xff0c;让其在重力的影响下&#xff0c;与两堵墙发生碰撞的…

嵌入式开发中的抽象、封装与继承

嵌入式开发中的抽象、封装与继承 ## 1 何从实现&#xff1f; OOP 是 CPP 的显著特征&#xff0c;尽管它是一种多重范式的语言 第一部分谈的是产品的实现&#xff08;implement&#xff09;而非产品的设计&#xff0c;因为对于个人开发者而言&#xff0c;往往是知道如何实现产…