大数跨境
0
0

Python丨python-docx模块

Python丨python-docx模块 谁说菜鸟不会数据分析
2024-05-28
2
导读:必学模块!

道阻且长

学习之路多歧路

一坚定目标

小小的思考

在学习完入门爬虫后,又到了选择学习路线的时候。
1、学习术语,打牢学习根基,例如常见的异常类型、PyCharm程序调试、函数递归、匿名函数、继承、多态、线程等知识。
2、利用Python助力日常工作,意味着继续学习其他模块并且案例演练。例如根据电子表数据批量生成单独文档、数据分析和处理、爬取金融数据并建模分析、批量整合Excel文件。
3、继续完善爬取链家的程序,目前还需要手动更换城市或区域信息,不懂界面设计并打包成exe文件。在考虑了多条学习后,决定在学习完批量生成单独文档和量整合Excel文件后,再开始完善爬取程序。

模块简介

python-docx模块是一个用于处理Word文档的Python模块,让用户可以使用Python代码来创建、修改和读取Word文件。
支持对文本、段落、表格、图片等多种元素的操作,可以创建、复制、删除、移动等。
Document是python-docx的核心类,用于表示整个Word文档,可以使用它来创建新文档、加载现有文档、保存文档等。
docx模块适合囊括在一个大系统中,自动根据系统信息生成合同或订单,因为有对应的系统数据库,就难以搭配多个软件来操作,否则量小的话,结合第三方软件更快捷简单。

应用场景

自动化生成文档:可以使用docx模块来自动化生成各种报告、合同、简历等文档,也可以根据文本模板和电子表数据动态生成文档内容。
批量处理文档:处理大量的Word文档,如查找和替换文本、修改样式、添加页眉页脚等。
其他场景入门者操作效率一般,还不如直接操作word文件。哪怕是根据Excel数据自动化生成文档这种经常碰见的问题,都有word的邮件合并作为简易替代。

安装疑难

通过pip下载模块很顺利,没有用到国内镜像,在安装docx模块时也正常,。但在导入模块和使用时报错,出现了两种情况。
直接导入整个模块,结果Document类的方法无法使用。
import docx
doc=Document('C:\测试\自动生成.docx')
#运行结果如下
未解析的引用Document!
从docx模块中导入Document类,结果docx模块中没有该类。
from docx import Document
doc = Document('path_to_your_document.docx')
#运行结果如下
'docx.py'中找不到Document
在pycharm中查找,发现有重名文件。
docx模块通常是指python-docx模块,是一个.py文件夹的包,该文件夹叫docx。
同时安装时会有个docx.py的文件,不知道为什么这个文件在包外面,让pycharm误以为是导入这个docx.py文件,在把docx.py的文件放入docx文件夹后顺利解决。

基础操作

创建并保存文档

Document()创建一个新的空白的Word文档对象,文档路径作为参数,或者不传任何参数。
该参数是在打开已有文档时才填的,如果没有对应文档,不会在指定路径创建文档,会直接报错找不到文件。
Document()不自带保存功能,因此需要使用Document对象save()方法保存文档。
创建文件并保存在当前文件夹中,即此时运行的.py文件所属文件夹。
from docx import Document
# 创建一个新的Word文档对象
document = Document()
# 将文档保存到pythonProject
document.save('自动创建.docx')
创建文件并保存在指定路径。
# 创建一个新的Word文档对象
document = Document()
# 添加文本内容
p = document.add_paragraph('这是一个新添加的段落。')
# 将文档保存到pythonProject
document.save(r'C:\测试\自动创建.docx')

添加标题

使用add_heading()方法添加标题,并通过参数指定标题级别(1到9)
document = Document()
# 添加一级标题
document.add_heading('一级标题', 0)  # 0代表标题1,级别从0开始计数
# 添加二级标题
document.add_heading('二级标题', 1)  # 0代表标题1,级别从0开始计数
# 添加三级标题
document.add_heading('三级标题', 2)  # 0代表标题1,级别从0开始计数
# 添加四级标题
document.add_heading('四级标题', 3)  # 0代表标题1,级别从0开始计数
# 添加九级标题
document.add_heading('九级标题', 8)  # 0代表标题1,级别从0开始计数
document.save(r'C:\测试\自动创建.docx')
效果如下图所示,生成的标题已经可以在word的导航窗格按层级显示。
更改字体颜色、大小和方框线,需要导入关联模块和其他代码修改。

添加文本

使用add_paragraph()方法添加文本,括号中的参数可以是字符串,也可以是变量。
# 创建一个新的Word文档对象
document = Document()
# 添加一个新文本
paragraph = document.add_paragraph('这是一个新添加的文本。')
# 设置文本内容,再添加一个新文本
text = '这是另一个新添加的文本。'
paragraph_2 = document.add_paragraph(text)
# 保存文档到指定路径
document.save(r'C:\测试\自动创建.docx')
同理,文本大小、字体、颜色、缩进、行间距都需要其他关联模块和代码修改。

文档、段落、文字三级结构

docx模块中,Word文本存在文档Document→段落Paragraph→文字块Run的三级结构,若需要变更其中信息,需要一级一级的遍历访问。

遍历段落

变量命名para是简写,避免与Paragraph类混淆。如果不使用paragraph.text属性,输出的则是内存地址而不是实际的文本内容。
from docx import Document
# 加载文档
document = Document('自动创建.docx')
# 遍历文档中的每个段落
for para in document.paragraphs:
#要打印段落中的文本,使用paragraph.text属性
    print(para.text)
#运行结果如下
这是一个新添加的段落。
测试
测试3

遍历文字

在遍历文档的每段时,进一步遍历每段中的每个文字。若需要在文字前后增加信息,需要再加一层遍历,遍历run的文本信息而不是run本身。
最后在run循环中加一个print函数,单独的print()调用会输出一个默认的换行符,这样在遍历每段Run后从新的一行开始输出。
from docx import Document
# 加载文档
document = Document(r'C:\测试\自动创建.docx')
# 遍历文档中的每个文字
for para in document.paragraphs:
    for run in para.runs:
        for char in run.text:
            print(char, end='*')
        print()
#运行结果如下
这*是*一*个*新*添*加*的*段*落*。*
测*试*
测*试*3*

点击蓝字,了解哆猫咪往期文章


【声明】内容源于网络
0
0
谁说菜鸟不会数据分析
以大数据分析为驱动,spss/R/python/数据分析交流技术分享,实用教程干货,敬请期待,B站UP主:谁说菜鸟不会数据分析 有更多在线实操视频。
内容 498
粉丝 0
谁说菜鸟不会数据分析 以大数据分析为驱动,spss/R/python/数据分析交流技术分享,实用教程干货,敬请期待,B站UP主:谁说菜鸟不会数据分析 有更多在线实操视频。
总阅读104
粉丝0
内容498