python docx包_[Python02] Python-docx包的使用,快速处理 Word 文件!

日常需要经常处理Word文档,发现了一个新的Python包:Python-docx,处理docx十分方便。

而且这个包和pandas包结合使用,可以在word插入excel表格,节省了很多复制、粘贴、调整表格样式的时间,真的很方便!

但是要注意:Python-docx只能处理docx、docx、docx文件!

下面给大家介绍一下如何使用Python-docx吧,抛砖引玉~

0. 学习思路

一、 基础!安装Python-docx,并对照”官方帮助说明“了解包的对象和基本函数;这里建议在python交互模式下进行,可以直观的看到返回值和报错。

二、 出题!自己定义一个问题并解决,来加深对包的理解。题目:”创建一个docx文件,要求输入2个表格,并且这个表格有填充的数字,表格前有相应标题。“

三、 进阶!试试包的更多函数,看会触发什么效果。结合pandas,学习表格和字体、字号、颜色的处理

一、 基础

1.1 使用conda安装python-docx:

conda install -c conda-forge python-docx

没有了解过conda的同学,可以看看 Anaconda国内镜像停止后,怎么办?(已恢复),文中有简单介绍。

1.2 简要了解Python-docx:

1 打开/读取文档

第一步当然是创建文档并打开啦~

from docx import Document

import os

path = "a.docx"

os.system("touch %s" %path) # 调用shell命令创建a.docx文件

documentNew = Document() # 不指定路径是创建文件

documnet = Document(path) # 指定路径是读取文件

w(゚Д゚)w 发现报错 PackageNotFoundError :

docx.opc.exceptions.PackageNotFoundError: Package not found ...

原来是因为a.docx中没有任何内容。打开a.docx之后输入几个字符,再重试以上代码,就不会报错了。

2 插入标题

使用 add_heading() 或add_paragraph()添加标题:

document.add_heading('Document Title', 0)

# 方法1

document.add_heading('Heading 1', level=1) # 用level设置,level为0-5,对应不同级别的标题

# 方法2

document.add_paragraph('Heading 1', style="Heading 1") # 用style来设置不同级别的标题

3. 插入段落

段落是word文档中最基本的对象之一。插入段落主要使用的函数是:add_paragraph() #添加段落

add_run() #追加文字

#插入段落, 同时设置粗体和斜体~

p = document.add_paragraph('A plain paragraph having some ')

p.add_run('bold').bold = True #粗体

p.add_run(' and some ')

p.add_run('italic.').italic = True #斜体

段落还可以使用style设置风格。

# 圆点列表

document.add_paragraph(

'first item in unordered list', style='List Bullet'

)

# 序号列表

document.add_paragraph(

'first item in ordered list', style='List Number'

)

# 引用

document.add_paragraph('Intense quote', style='Intense Quote')

4 插入图片

from docx.shared import Inches

document.add_picture('image-filename.png', width=Inches(1.0))

5 分页符

document.add_page_break()

6 插入表格

主要使用的函数:add_table() # 新建表格

add_row() # 添加行

add_col() # 添加列

table.cell(i, j).text() # 往表格中添加内容

table.rows() # 行数

table.cols() # 列数

records = (

(3, '101', 'Spam'),

(7, '422', 'Eggs'),

(4, '631', 'Spam, spam, eggs, and spam')

)

# 新建1行3列的表

table = document.add_table(rows=1, cols=3) # row行, col列

# 使用table 的rows()和columns()得到这个表格的行数和列数

print(len(table.rows))

print(len(table.columns))

# 添加标题行

hdr_cells = table.rows[0].cells # 注意 table.rows(0)表示第1行

hdr_cells[0].text = 'Qty'

hdr_cells[1].text = 'Id'

hdr_cells[2].text = 'Desc'

# 将records中的数据添加到新建的table中

for qty, id, desc in records:

row_cells = table.add_row().cells

row_cells[0].text = str(qty)

row_cells[1].text = id

row_cells[2].text = desc

如果熟悉pandas,那你肯定知道创建的dataframe默认会自带标题行。但是python-docx不同,需要自行添加标题行。这里要注意一下,不过别紧张不需要死记硬背,出现问题多调试就行~

7 保存文件

document.save(path) # 指定路径

二、 做题!

至此,官方文档的示例学的差不多了,基本上就是对标题、段落、表格和图片的处理。

下面来做一个简单的题目:创建一个docx文件,要求输入2个三行七列的三线表。

表格1:标题栏为数字1到7。表格前有相应标题“1. 表格1”,标题的字体为等线,且为斜体。

表格2:标题栏为大写字母A到G。表格前有相应标题“2. 表格2”, 标题的字号为12,且为粗体。

希望你先自己写一下,有问题多搜索。然后再来看看我的答案,对比下思路的不同。这样学的更快,有问题也可以互相交流学习~

实现代码:

#!/bin/usr/env python

from docx import Document

from docx.shared import Pt # 设置字号

document = Document()

# 表格1

# 标题1,字体为等线,且为斜体

title1 = document.add_heading(u'1.表格1', level=1)

title1.style.font.name = u'等线' # 设置中文字体前面要有u

title1.italic = True

table1 = document.add_table(rows=3,cols=7) # 3行7列

# 设置表格标题栏

for i in range(7):

table1.cell(0,i).text = str(i+1)

table1.style="Light Shading" # 风格为三线表

# 表格2

# 标题2,字号为12,且为粗体

title2 = document.add_paragraph(u'2.表格2',style="heading 1")

title2.style.font.size = Pt(12)

title2.bold = True

table2 = document.add_table(rows=3,cols=7) # 3行7列

headLine = ["A","B","C","D","E","F","G"]

# 设置表格标题栏

for i in range(7):

table2.cell(0,i).text = headLine[i]

table2.style="Light Shading" # 风格为三线表

# 储存

document.save("test.docx")

最终结果↓ :

三、进阶

3.1 表格样式模板:

其中常用的有Light Shading(三线表)↓ :

Table Grid(网格型)↓ :

Light Grid(浅色网格)↓ :

Medium List 1(中等深浅列表1) ↓:

Medium List 2(中等深浅列表2) ↓ :

可以点击查看 python---word表格样式设置. 蜗v牛. CSDN 查看更多样式示例。但是现在的Python-docx包代码有些更新,样式和该链接中的图例部分有出入。使用时需要自行调试~

3.2 自定义表格样式

先试试下面的代码~

from docx import Document # 输出docx

from docx.shared import Pt # 设置字号

from docx.shared import Cm # 设置宽度,单位是cm

from docx.shared import RGBColor # 设置字体颜色

document = Document()

table = document.add_table(6,2, style="Normal Table")

colHeadLine = ["A","B","C","D","E","F"]

for i in range(6):

# 给单元格赋值的同时修改样式,不影响整个表格

cell = table.cell(i,0)

cell.width = Cm(2) # 设置单元格宽度为2cm

run = cell.paragraphs[0].add_run(colHeadLine[i])

run.font.color.rgb = RGBColor(0,100,0)

run.font.name = u'等线'

run.italic = True

table.columns[0].width=Cm(3)

# 修改整个表格的字体样式

table.style.font.size = Pt(10)

# 保存

document.save("test.docx")

3.2.1 表格自动适应窗口大小:

table.autofit = True

3.2.2 自定义表格宽度或高度:

a. 方法1:

table.cell(row,col).width = Cm(4) #

table.cell(row,col).height = Cm(4)

b. 方法2:

特别需要注意的是,column和row后面是有s的!

官方文档中有无s标注错误,害得我还以为不能这样操作,捂脸.jpg。

table.columns[0].width=Cm(2) # 不起效,不知道为什么

table.rows[0].height=Cm(2) # 起效

3.2.3 对齐

a. 表格对齐:

table.alignment = WD_TABLE_ALIGNMENT.CENTER #居中

table.alignment = WD_TABLE_ALIGNMENT.LEFT #靠左

table.alignment = WD_TABLE_ALIGNMENT.RIGHT #靠右

b. 文字对齐:

# 水平方向

table.cell(row,col).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER

table.cell(row,col).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT

table.cell(row,col).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.RIGHT

# 垂直方向

table.cell(row,col).vertical_alignment = WD_ALIGN_VERTICAL.CENTER

table.cell(row,col).vertical_alignment = WD_ALIGN_VERTICAL.TOP

table.cell(row,col).vertical_alignment = WD_ALIGN_VERTICAL.BOTTOM

3.3 add_run() 设置字体、字号和颜色

from docx import Document

from docx.shared import Pt # 设置字号

from docx.shared import RGBColor # 设置字体颜色

document = Document()

p = document.add_paragraph('A plain paragraph')

run = p.add_run(' is plain') # 注意is之前的空格

run.font.name = u'等线' #设置字体

run.font.size = Pt(10.5) # 设置字号

run.font.color.rgb = RGBColor(250,0,0) # 设置字体颜色

# 保存

document.save("test.docx")3.3 结果

3.4 结合pandas的iloc函数,将dataframe写入word

import pandas as pd

from docx import Document # 输出docx

from docx.shared import Pt # 设置字号

document = Document()

df = pd.read_csv(a.csv, sep="\t")

rowNum = df.shape[0] + 1 # 行数,加标题栏

colNum = df.shape[1] # 列数

table = document.add_table(rows=rowNum, cols=colNum, style = "Light Grid")

table.cell(0,0).text = "a"

table.cell(0,1).text = "b"

table.cell(0,2).text = "c"

table.cell(0,3).text = "d"

for i in range(1, rowNum):

for j in range(colNum):

cell = table.cell(i,j)

cell.text = str(df.iloc[i-1,j])

table.autofit = True

table.style.font.name = u'等线'

table.style.font.size = Pt(12)

document.save(outPutDocx)

一个示例 ↓ :

四、总结如何创建和读取文档

插入标题、段落、图片、分页符和表格

进阶学习,表格和段落的字体、字号、颜色的处理

后续如果发现更多有趣的用法,也会更新本文~

觉得有用别忘记点赞呀~

感谢O(∩_∩)O~

以上!

:梨酱:[论文写作 1] 如何用word批量制作三线表?​zhuanlan.zhihu.com梨酱:[Linux 1] Shell“ 多线程”,提高工作效率​zhuanlan.zhihu.com梨酱:[生信资料 3] 生物信息学常见数据格式,汇总!​zhuanlan.zhihu.com

参考:

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

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

相关文章

c study_13

第十章:文件 文件文件的基本概念  所谓"文件"是指一组相关数据的有序集合。 这个数据集有一个名称,叫做文件名。 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外…

PAT乙类1014 福尔摩斯的约会 (20 分)

一、题目 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了, 字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对…

LeetCode 507. 完美数

1. 题目 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。 给定一个 整数 n, 如果他是完美数,返回 True,否则返回 False 示例: 输入: 28 输出: True 解释: 28 1 2…

python分段函数图像画法_我想用Python matplotlib 画一个这样类似的图像,需要用到分段函数。大佬帮帮这个小弟?...

有做出来了import matplotlib.pyplot as pltimport numpy as npdef lin():#直线方程i0while i!80:m np.linspace(20, 100, 3)n [(80-i), (80-i), (80-i)]axes.plot(m, n)i i 20def cruve():#圆弧方程k0while k!60:if k20:r 10.0#半径a, b ((70-k) ,-20 )#圆心坐标x np.a…

python笔记(五) - 获取对象的引用

1&#xff0c;使用 getattr 函数&#xff0c;可以得到一个直到运行时才知道名称的函数的引用。 >>>li ["Larry", "Curly"]>>>li.pop<built-inmethod pop of list object at 0x00A75850>>>>getattr(li,pop)<built-inme…

spring-test dao空指针异常_014、Java异常机制

1.异常的概念和分类异常指程序运行过程中出现的非正常现象&#xff0c;例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。在Java的异常处理机制中&#xff0c;引进了很多用来描述和处理异常的类&#xff0c;称为异常类。异常类定义中包含了该类异常的信息和…

基于奇异值分解(SVD)的图片压缩实践

文章目录1. 前言2. 原理简介2.1 SVD定义3. 实践代码4. 参考文献1. 前言 数字图片在计算机中是以矩阵形式存储的。所以可以通过矩阵理论和矩阵算法对数字图像进行分析和处理。本文通过对图片进行SVD压缩&#xff0c;对不同的参数下的压缩效果进行对比。 SVD概念可以参考&#…

执行文件异常报错:ImportError: attempted relative import with no known parent package

问题描述 1. 源代码中的导入代码&#xff1a; from ..utils.osutils import mkdir_if_missing #导入自己的 函数 from ..utils.serialization import write_json, read_json这个是将utils中的py文件导入到cuhk03中。但是报错&#xff01; 解决方法 1. 相对导入 其中上述…

待机、休眠、睡眠的区别和优缺点

Windows操作系统中很早就加入了待机、休眠等模式&#xff0c;而Windows Vista中更是新加入了一种叫做睡眠的模式&#xff0c;可是很多人还是习惯在不使用电脑的时候将其彻底关闭。其实充分利用这些模式&#xff0c;我们不仅可以节约电力消耗&#xff0c;还可以用尽可能短的时间…

LeetCode 508. 出现次数最多的子树元素和(递归)

1. 题目 给你一个二叉树的根结点&#xff0c;请你找出出现次数最多的子树元素和。 一个结点的「子树元素和」定义为以该结点为根的二叉树上所有结点的元素之和&#xff08;包括结点本身&#xff09;。 你需要返回出现次数最多的子树元素和。如果有多个元素出现的次数相同&…

知识图谱入门视频(一)

学习内容&#xff1a; 知识图谱导论 陈华钧 浙江大学计算机科学与技术学院 教授 小象学院 哔哩哔哩 第一章 【其实后面的方法学习只是一个框架式的学习&#xff0c;并不明白具体的操作】 1. 什么是知识图谱&#xff1f; 知识图谱是一个系统&#xff01; 从根据场景构建再到场…

onenetsim定位功能吗_经常玩手机的抓紧看看,原来手机键盘还隐藏4个实用功能,真实用...

可爱的人都关注我了&#xff0c;就差你了1在日常生活中&#xff0c;大家对手机的依赖性越来越大&#xff0c;不管走到哪&#xff0c;时时刻刻都拿着手机发信息。可是&#xff0c;用了这么久的手机&#xff0c;你真的会用手机键盘吗&#xff1f;你知道手机键盘上隐藏的小功能吗&…

程序模拟键盘鼠标操作

用代码模拟键盘鼠标操作,主要用到keybd_event/mouse_event或者SendInput API函数.使用示例如下(附注释): /** 模拟键盘输入,以按窗口键(WIN键)为例 *///keybd_event模拟键盘输入示例::keybd_event( VK_LWIN, 0, 0, 0); //按下WIN键 ::keybd_event( VK_LW…

LeetCode 520. 检测大写字母

1. 题目 给定一个单词&#xff0c;你需要判断单词的大写使用是否正确。 我们定义&#xff0c;在以下情况时&#xff0c;单词的大写用法是正确的&#xff1a; 全部字母都是大写&#xff0c;比如"USA"。 单词中所有字母都不是大写&#xff0c;比如"leetcode&qu…

不同电脑 命名管道_电脑键盘上的F1到F12,这些键都有哪些用处?用了5年总算明白了...

电脑键盘上的F1到F12&#xff0c;这些键都有哪些用处&#xff0c;用了5年总算明白了经常使用电脑的朋友会发现&#xff0c;电脑键盘上有一排F开头的键。那么这些键到底有什么用处呢&#xff1f;下面我们一起来了解一下。首先这些键都属于快捷键&#xff0c;所以每个键都有不同的…

知识图谱入门视频(二)

学习内容 小象学院 b站 第二章 【其实后面的方法学习只是一个框架式的学习&#xff0c;并不明白具体的操作】 第二部 典型知识库项目简介 CYC&#xff08;读音&#xff1a; 赛克&#xff09; CYC&#xff1a; 1984年由Douglas Lenat开始创建&#xff0c;最初的目标是建立人类…

InterDev 调试错误信息: Unable to set server into correct debugging state automatically....的解决办法...

InterDev 调试错误信息: Unable to set server into correct debugging state automatically....权威解决方法了&#xff1a;1、安装 vs6.0 cd2 vid_ss/setup.exe 2、安装 vs6.0 cd2 vid_ss/setup.exe3、配置dcom&#xff0c;设置用户权限4、打开IIS的调试功能5、OK详情见微软…

LeetCode 521. 最长特殊序列 Ⅰ

1. 题目 给你两个字符串&#xff0c;请你从这两个字符串中找出最长的特殊序列。 「最长特殊序列」定义如下&#xff1a;该序列为某字符串独有的最长子序列&#xff08;即不能是其他字符串的子序列&#xff09;。 子序列 可以通过删去字符串中的某些字符实现&#xff0c;但不…

wordpress acf字段 不同样式_提升wordpress执行效率二次开发实录

wordpress 对分类增加广告配置功能 wp_terms 增加admaster字段 varchar 200 wp-admin/edit-tag-form.php 小资料&#xff1a; wordpress wp_terms分类表 wp_term_taxonomy分类类型表、wp_term_relationships分类关联表 这三个表单相互关联 wordpress优化效率 当wordpress执行…

知识图谱入门知识(一)知识图谱应用以及常用方法概述

学习内容 搜集各种博客&#xff0c;理解实体识别、关系分类、关系抽取、实体链指、知识推理等&#xff0c;并且总结各种分类中最常用的方法、思路。 由于自己刚刚接触知识图谱&#xff0c;对该领域的概念和方法的描述还不是很清楚&#xff0c;所以只是简单的列出框架和添加链接…