Python使用docx模块处理word文档流程详解

 更新时间:2023年05月19日 10:17:06   作者:魔王不会哭  
这篇文章主要介绍了Python使用docx模块处理word文档流程,docx模块是用于创建和更新Microsoft Word文件的Python库,用于办公可以显著提升工作效率,感兴趣的同学可以参考下文

一.docx模块

Python可以利用python-docx模块处理word文档,处理方式是面向对象的。

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

二.相关概念

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

  • Document对象,表示一个word文档。
  • Paragraph对象,表示word文档中的一个段落
  • 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的写的方式可以参考官方文档的介绍

到此这篇关于Python使用docx模块处理word文档流程详解的文章就介绍到这了,更多相关Python docx模块处理word文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现得到一个给定类的虚函数

    python实现得到一个给定类的虚函数

    这篇文章主要介绍了python实现得到一个给定类的虚函数的方法,以wx的PyPanel类为例讲述了打印以base_开头的方法的实例,需要的朋友可以参考下
    2014-09-09
  • python调用可执行文件.exe的2种实现方法

    python调用可执行文件.exe的2种实现方法

    Python是一种流行的编程语言,可以轻松地通过脚本调用各种应用程序,本文就详细的介绍了python调用可执行文件.exe的2种实现方法,感兴趣的可以了解一下
    2023-08-08
  • Python实现将列表导出为Excel文件

    Python实现将列表导出为Excel文件

    在 Python 数据处理场景中,将列表(List)数据导出为 Excel 文件是高频需求,本文将演示如何用 Free Spire.XLS for Python 实现列表转 Excel,感兴趣的小伙伴可以了解下
    2025-12-12
  • web自动化测试Selenium点击元素的常用方法

    web自动化测试Selenium点击元素的常用方法

    在Web自动化测试中,Selenium提供多种点击方法,常用的click()方法通过选中元素并触发点击事件,若click()方法不稳定,可以采用JavaScript执行点击或使用ActionChains类模拟鼠标点击,需要的朋友可以参考下
    2024-09-09
  • 如何利用Python将html转为pdf、word文件

    如何利用Python将html转为pdf、word文件

    网络上存在很多将HTML转换为PDF的软件和工具,但是大家都知道收费,所以下面这篇文章主要给大家介绍了关于如何利用Python将html转为pdf、word文件的相关资料,文中通过示例代码介绍介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Pytorch抽取网络层的Feature Map(Vgg)实例

    Pytorch抽取网络层的Feature Map(Vgg)实例

    今天小编就为大家分享一篇Pytorch抽取网络层的Feature Map(Vgg)实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 详解如何在Pandas中删除常量列

    详解如何在Pandas中删除常量列

    常数列不提供可变性,这意味着它们无助于区分不同的数据点,在许多机器学习模型中,这些列会引入冗余或不相关的数据,从而对性能产生负面影响,因此,通常必须删除常量列,所以本文我们将探索如何使用Python识别和删除Pandas DataFrame中的常量列,需要的朋友可以参考下
    2025-03-03
  • Python中的CSV文件使用

    Python中的CSV文件使用"with"语句的方式详解

    with语句的主要用法是对语句中使用的对象进行异常安全的清除.确保文件已关闭,锁定已释放,上下文恢复等.本文通过实例代码给大家介绍Python中的CSV文件使用"with"语句的相关知识,感兴趣的朋友一起看看吧
    2018-10-10
  • pytorch如何保存训练模型参数并实现继续训练

    pytorch如何保存训练模型参数并实现继续训练

    这篇文章主要介绍了pytorch如何保存训练模型参数并实现继续训练问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Python 查看数据类型与格式

    Python 查看数据类型与格式

    这篇文章主要介绍了Python 查看数据类型与格式方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论