作者:超级大洋葱806

https://tangxing.blog.csdn.net/article/details/108418066

大家好,我是小z

老有同学问关于自动化办公的内容,今天就给大家分享一篇15000+字的干货长文。

顺便闪现来波送书福利,3本《Python入门到人工智能实战》,纯拼手气抽奖,想直接参与的可空降文末。

环境安装

使用Python操作word大部分情况都是写操作,也有少许情况会用到读操作,在本次教程中都会进行讲解,本次课程主要用到以下4个库,请大家提前安装。

升级pip(便于安装最新库)

python -m pip install -U pip setuptools

python-docx(我们大部分操作都是使用此库)

安装方法:

pip install python-docx

使用方法:

from docx import Document
from docx.shared import Inches

官方文档:

https://python-docx.readthedocs.io/en/latest/index.html

win32com(主要用作doc转docx格式转换用)

安装方法:

pip install pypiwin32

使用方法:

import win32com
from win32com.client import Dispatch, constants

官方文档:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word?view=word-pia

mailmerge(用作按照模板生成大量同类型文档)

安装方法:

pip install docx-mailmerge

使用方法:

from mailmerge import MailMerge

官方文档:

https://pypi.org/project/docx-mailmerge/

matplotlib(Python 的绘图库,本期简单讲解,后期会有专门的课程)

安装方法:

pip install matplotlib

使用方法:

import matplotlib.pyplot as plt

官方文档:

https://matplotlib.org/3.2.2/tutorials/introductory/sample_plots.html

Python-docx 新建文档

示例代码1:

from docx import Document
document = Document()
document.save('new.docx')

效果如下:

示例代码 0.1 Python-docx新建文档.py:

from docx import Documentdef GenerateNewWord(filename):document = Document()document.save(filename)if __name__ == "__main__":print("大家好!我们今天开始学习word文档自动化")print("我们先来直接生成一个名为‘new.docx’的文档")document = Document()document.save('new.docx')print("没错,里面什么都没有")# 我是华丽的分隔符print("我们使用函数生成一个word文档试试")newname = '使用函数生成的文档.docx'GenerateNewWord(newname)

效果如下:

Python-docx 编辑已存在文档

我们很多时候需要在已存在的word文档上添加自己的内容,那么我们赶紧看看应该怎样操作吧~

旧文档:

示例代码:

from docx import Document
document = Document('exist.docx')
document.save('new.docx')

也许你会说,没有没搞错,就这三句话?是的,就这三句,你就完成了旧文档的复制,如果你想修改,直接添加内容就行了呢!

效果如下:

win32com 将 doc 转为 docx

旧文档:

示例代码:

import os
from win32com import client as wcdef TransDocToDocx(oldDocName,newDocxName):print("我是 TransDocToDocx 函数")# 打开word应用程序word = wc.Dispatch('Word.Application')# 打开 旧word 文件doc = word.Documents.Open(oldDocName)# 保存为 新word 文件,其中参数 12 表示的是docx文件doc.SaveAs(newDocxName, 12)# 关闭word文档doc.Close()word.Quit()print("生成完毕!")if __name__ == "__main__":# 获取当前目录完整路径currentPath = os.getcwd()print("当前路径为:",currentPath)# 获取 旧doc格式word文件绝对路径名docName = os.path.join(currentPath,'旧doc格式文档.doc')print("docFilePath = ", docName)# 设置新docx格式文档文件名docxName = os.path.join(currentPath,'新生成docx格式文档.docx')TransDocToDocx(docName,docxName)

效果如下:

win32com 操作 word

打开新的word文档并添加内容

示例代码:

import win32com
from win32com.client import Dispatch, constants
import os# 创建新的word文档
def funOpenNewFile():word = Dispatch('Word.Application')# 或者使用下面的方法,使用启动独立的进程:# word = DispatchEx('Word.Application')# 如果不声明以下属性,运行的时候会显示的打开wordword.Visible = 1  # 0:后台运行 1:前台运行(可见)word.DisplayAlerts = 0  # 不显示,不警告# 创建新的word文档doc = word.Documents.Add()# 在文档开头添加内容myRange1 = doc.Range(0, 0)myRange1.InsertBefore('Hello word\n')# 在文档末尾添加内容myRange2 = doc.Range()myRange2.InsertAfter('Bye word\n')# 在文档i指定位置添加内容i = 0myRange3 = doc.Range(0, i)myRange3.InsertAfter("what's up, bro?\n")# doc.Save()  # 保存doc.SaveAs(os.getcwd() + "\\funOpenNewFile.docx")  # 另存为doc.Close()  # 关闭 word 文档word.Quit()  # 关闭 officeif __name__ == '__main__':print("当前文件路径名:",os.getcwd())print("调用funOpenNewFile()")funOpenNewFile()

效果如下:

打开已存在word文档并添加内容

前提条件:

示例代码:

import win32com
from win32com.client import Dispatch, constants
import os# 打开已存在的word文件
def funOpenExistFile():word = Dispatch('Word.Application')# 或者使用下面的方法,使用启动独立的进程:# word = DispatchEx('Word.Application')# 如果不声明以下属性,运行的时候会显示的打开wordword.Visible = 1  # 0:后台运行 1:前台运行(可见)word.DisplayAlerts = 0  # 不显示,不警告doc = word.Documents.Open(os.getcwd() + "\\3.1 win32com测试.docx") # 打开一个已有的word文档# 在文档开头添加内容myRange1 = doc.Range(0, 0)myRange1.InsertBefore('Hello word\n')# 在文档末尾添加内容myRange2 = doc.Range()myRange2.InsertAfter('Bye word\n')# 在文档i指定位置添加内容i = 0myRange3 = doc.Range(0, i)myRange3.InsertAfter("what's up, bro?\n")# doc.Save()  # 保存doc.SaveAs(os.getcwd() + "\\funOpenExistFile.docx")  # 另存为doc.Close()  # 关闭 word 文档word.Quit()  # 关闭 officeif __name__ == '__main__':print("当前文件路径名:",os.getcwd())print("调用funOpenExistFile()")funOpenExistFile()

效果如下:

转换word为pdf

示例代码:

import win32com
from win32com.client import Dispatch, constants
import os# 生成Pdf文件
def funGeneratePDF():word = Dispatch("Word.Application")word.Visible = 0  # 后台运行,不显示word.DisplayAlerts = 0  # 不警告doc = word.Documents.Open(os.getcwd() + "\\3.3 win32com转换word为pdf等格式.docx") # 打开一个已有的word文档doc.SaveAs(os.getcwd() + "\\3.3 win32com转换word为pdf等格式.pdf", 17)  # txt=4, html=10, docx=16, pdf=17doc.Close()word.Quit()if __name__ == '__main__':funGeneratePDF()

效果如下:

Python-docx 操作 word

官方文档:(最权威指南,没有之一)

https://python-docx.readthedocs.io/en/latest/

Python-docx官方例程

前提条件:

示例代码:

from docx import Document
from docx.shared import Inchesdocument = Document()document.add_heading('Document Title', 0)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 = Truedocument.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='Intense Quote')document.add_paragraph('first item in unordered list', style='List Bullet'
)
document.add_paragraph('first item in ordered list', style='List Number'
)document.add_picture('countrygarden.png', width=Inches(1.25))records = ((3, '101', 'Spam'),(7, '422', 'Eggs'),(4, '631', 'Spam, spam, eggs, and spam')
)table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for qty, id, desc in records:row_cells = table.add_row().cellsrow_cells[0].text = str(qty)row_cells[1].text = idrow_cells[2].text = descdocument.add_page_break()document.save('4.1 Python-docx官方例程.docx')

最终效果:

Python-docx官方例程解析

  • 导入库操作

from docx import Document
  • 导入英寸单位操作(可用于指定图片大小、表格宽高等)

from docx.shared import Inches
  • 新建一个文档

document = Document()
  • 加载旧文档(用于修改或添加内容)

document = Document('exist.docx')
  • 添加标题段落

document.add_heading('Document Title', 0)

  • 添加段落操作

段落在 Word 中是基本内容。它们用于正文文本,也用于标题和项目列表(如项目符号)。

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  # 添加斜体文字

  • 添加标题操作

等级1-9 也就是标题1-标题9,我们可以在旧文档中将标题格式设置好,使用Python-docx打开旧文档,再添加相应等级标题即可。

document.add_heading('Heading, level 1', level=1)

  • 添加指定样式段落

样式详情:

https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html#understanding-styles

document.add_paragraph('Intense quote', style='Intense Quote')# 以下两句的含义等同于上面一句
p = document.add_paragraph('Intense quote')
p.style = 'Intense Quote'
  • 添加无序列表操作

document.add_paragraph( 'first item in unordered list', style='List Bullet')
  • 添加有序列表操作

document.add_paragraph( 'first item in ordered list', style='List Number')

  • 添加图片操作

第一个参数为图片路径,需要正确无误

第二个参数为图片大小,单位英寸

document.add_picture('countrygarden.png', width=Inches(1.25))

  • 新建表格操作

table = document.add_table(rows=1, cols=3)
  • 填充标题行操作

hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
  • 为每组内容添加数据行并填充

for qty, id, desc in records:row_cells = table.add_row().cellsrow_cells[0].text = str(qty)row_cells[1].text = idrow_cells[2].text = desc
  • 设置标题样式操作

table.style = 'LightShading-Accent1'

  • 添加分页符操作

document.add_page_break()
  • 保存当前文档操作

document.save('4.1 Python-docx官方例程.docx')

Python-docx 表格样式设置

表格样式设置代码:

from docx import *
document = Document()table = document.add_table(3, 3, style="Medium Grid 1 Accent 1")
heading_cells = table.rows[0].cells
heading_cells[0].text = '第一列内容'
heading_cells[1].text = '第二列内容'
heading_cells[2].text = '第三列内容'document.save("demo.docx")

遍历所有样式:

from docx.enum.style import WD_STYLE_TYPE
from docx import Documentdocument = Document()
styles = document.styles# 生成所有表样式
for s in styles:if s.type == WD_STYLE_TYPE.TABLE:document.add_paragraph("表格样式 :  " + s.name)table = document.add_table(3, 3, style=s)heading_cells = table.rows[0].cellsheading_cells[0].text = '第一列内容'heading_cells[1].text = '第二列内容'heading_cells[2].text = '第三列内容'document.add_paragraph("\n")document.save('4.3 所有表格样式.docx')

效果如下(大家按照喜欢的样式添加即可):

docx&matplotlib 自动生成数据分析报告

最终效果

数据获取

我们这里使用xlrd作为数据获取所使用的库,简单回顾一下:

import xlrdxlsx = xlrd.open_workbook('./3_1 xlrd 读取 操作练习.xlsx')# 通过sheet名查找:xlsx.sheet_by_name("sheet1")
# 通过索引查找:xlsx.sheet_by_index(3)
table = xlsx.sheet_by_index(0)# 获取单个表格值 (2,1)表示获取第3行第2列单元格的值
value = table.cell_value(2, 1)
print("第3行2列值为",value)# 获取表格行数
nrows = table.nrows
print("表格一共有",nrows,"行")# 获取第4列所有值(列表生成式)
name_list = [str(table.cell_value(i, 3)) for i in range(1, nrows)]
print("第4列所有的值:",name_list)

表格内容:

编写数据获取代码:

我们这里只获取用户姓名和,分数,并将它们保存到列表中,看代码。

# 获取学习成绩信息
def GetExcelInfo():print("开始获取表格内容信息")# 打开指定文档xlsx = xlrd.open_workbook('学生成绩表格.xlsx')# 获取sheetsheet = xlsx.sheet_by_index(0)# 获取表格行数nrows = sheet.nrowsprint("一共 ",nrows," 行数据")# 获取第2列,和第4列 所有值(列表生成式),从第2行开始获取nameList = [str(sheet.cell_value(i, 1)) for i in range(1, nrows)]scoreList = [int(sheet.cell_value(i, 3)) for i in range(1, nrows)]# 返回名字列表和分数列表return nameList,scoreList

获取结果:

柱状图生成

我们先将获取的姓名和成绩使用 字典 数据结构关联起来,再对其排序:

# 将名字和分数列表合并成字典(将学生姓名和分数关联起来)
scoreDictionary = dict(zip(nameList, scoreList))
print("dictionary:",scoreDictionary)# 对字典进行值排序,高分在前,reverse=True 代表降序排列
scoreOrder = sorted(scoreDictionary.items(), key=lambda x: x[1], reverse=True)
print("scoreOrder",scoreOrder)

效果如下:

# 合成的字典
dictionary: {'Dillon Miller': 41, 'Laura Robinson': 48, 'Gabrilla Rogers': 28, 'Carlos Chen': 54, 'Leonard Humphrey': 44, 'John Hall': 63, 'Miranda Nelson': 74, 'Jessica Morgan': 34, 'April Lawrence': 67, 'Cindy Brown': 52, 'Cassandra Fernan': 29, 'April Crawford': 91, 'Jennifer Arias': 61, 'Philip Walsh': 58, 'Christina Hill P': 14, 'Justin Dunlap': 56, 'Brian Lynch': 84, 'Michael Brown': 68}# 排序后,再次转换成列表
scoreOrder [('April Crawford', 91), ('Brian Lynch', 84), ('Miranda Nelson', 74), ('Michael Brown', 68), ('April Lawrence', 67), ('John Hall', 63), ('Jennifer Arias', 61), ('Philip Walsh', 58), ('Justin Dunlap', 56), ('Carlos Chen', 54), ('Cindy Brown', 52), ('Laura Robinson', 48), ('Leonard Humphrey', 44), ('Dillon Miller', 41), ('Jessica Morgan', 34), ('Cassandra Fernan', 29), ('Gabrilla Rogers', 28), ('Christina Hill P', 14)]

使用 matplotlib 生成柱状图:

# 生成学生成绩柱状图(使用matplotlib)
# 会生成一张名为"studentScore.jpg"的图片
def GenerateScorePic(scoreList):# 解析成绩列表,生成横纵坐标列表xNameList = [str(studentInfo[0]) for studentInfo in scoreList]yScoreList = [int(studentInfo[1]) for studentInfo in scoreList]print("xNameList",xNameList)print("yScoreList",yScoreList)# 设置字体格式matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文# 设置绘图尺寸plt.figure(figsize=(10,5))# 绘制图像plt.bar(x=xNameList, height=yScoreList, label='学生成绩', color='steelblue', alpha=0.8)# 在柱状图上显示具体数值, ha参数控制水平对齐方式, va控制垂直对齐方式for x1, yy in scoreList:plt.text(x1, yy + 1, str(yy), ha='center', va='bottom', fontsize=16, rotation=0)# 设置标题plt.title("学生成绩柱状图")# 为两条坐标轴设置名称plt.xlabel("学生姓名")plt.ylabel("学生成绩")# 显示图例plt.legend()# 坐标轴旋转plt.xticks(rotation=90)# 设置底部比例,防止横坐标显示不全plt.gcf().subplots_adjust(bottom=0.25)# 保存为图片plt.savefig("studentScore.jpg")# 直接显示plt.show()

效果如下:

生成最终报告

代码如下:

# 开始生成报告
def GenerateScoreReport(scoreOrder,picPath):# 新建一个文档document = Document()# 设置标题document.add_heading('数据分析报告', 0)# 添加第一名的信息p1 = document.add_paragraph("分数排在第一的学生姓名为: ")p1.add_run(scoreOrder[0][0]).bold = Truep1.add_run(" 分数为: ")p1.add_run(str(scoreOrder[0][1])).italic = True# 添加总体情况信息p2 = document.add_paragraph("共有: ")p2.add_run(str(len(scoreOrder))).bold = Truep2.add_run(" 名学生参加了考试,学生考试的总体情况: ")# 添加考试情况表格table = document.add_table(rows=1, cols=2)table.style = 'Medium Grid 1 Accent 1'hdr_cells = table.rows[0].cellshdr_cells[0].text = '学生姓名'hdr_cells[1].text = '学生分数'for studentName,studentScore in scoreOrder:row_cells = table.add_row().cellsrow_cells[0].text = studentNamerow_cells[1].text = str(studentScore)# 添加学生成绩柱状图document.add_picture(picPath, width=Inches(6))document.save('学生成绩报告.docx')

完整代码

import xlrd
import matplotlib
import matplotlib.pyplot as plt
from docx import Document
from docx.shared import Inches# 获取学习成绩信息
def GetExcelInfo():print("开始获取表格内容信息")# 打开指定文档xlsx = xlrd.open_workbook('学生成绩表格.xlsx')# 获取sheetsheet = xlsx.sheet_by_index(0)# 获取表格行数nrows = sheet.nrowsprint("一共 ",nrows," 行数据")# 获取第2列,和第4列 所有值(列表生成式),从第2行开始获取nameList = [str(sheet.cell_value(i, 1)) for i in range(1, nrows)]scoreList = [int(sheet.cell_value(i, 3)) for i in range(1, nrows)]# 返回名字列表和分数列表return nameList,scoreList# 生成学生成绩柱状图(使用matplotlib)
# 会生成一张名为"studentScore.jpg"的图片
def GenerateScorePic(scoreList):# 解析成绩列表,生成横纵坐标列表xNameList = [str(studentInfo[0]) for studentInfo in scoreList]yScoreList = [int(studentInfo[1]) for studentInfo in scoreList]print("xNameList",xNameList)print("yScoreList",yScoreList)# 设置字体格式matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文# 设置绘图尺寸plt.figure(figsize=(10,5))# 绘制图像plt.bar(x=xNameList, height=yScoreList, label='学生成绩', color='steelblue', alpha=0.8)# 在柱状图上显示具体数值, ha参数控制水平对齐方式, va控制垂直对齐方式for x1, yy in scoreList:plt.text(x1, yy + 1, str(yy), ha='center', va='bottom', fontsize=16, rotation=0)# 设置标题plt.title("学生成绩柱状图")# 为两条坐标轴设置名称plt.xlabel("学生姓名")plt.ylabel("学生成绩")# 显示图例plt.legend()# 坐标轴旋转plt.xticks(rotation=90)# 设置底部比例,防止横坐标显示不全plt.gcf().subplots_adjust(bottom=0.25)# 保存为图片plt.savefig("studentScore.jpg")# 直接显示plt.show()# 开始生成报告
def GenerateScoreReport(scoreOrder,picPath):# 新建一个文档document = Document()# 设置标题document.add_heading('数据分析报告', 0)# 添加第一名的信息p1 = document.add_paragraph("分数排在第一的学生姓名为: ")p1.add_run(scoreOrder[0][0]).bold = Truep1.add_run(" 分数为: ")p1.add_run(str(scoreOrder[0][1])).italic = True# 添加总体情况信息p2 = document.add_paragraph("共有: ")p2.add_run(str(len(scoreOrder))).bold = Truep2.add_run(" 名学生参加了考试,学生考试的总体情况: ")# 添加考试情况表格table = document.add_table(rows=1, cols=2)table.style = 'Medium Grid 1 Accent 1'hdr_cells = table.rows[0].cellshdr_cells[0].text = '学生姓名'hdr_cells[1].text = '学生分数'for studentName,studentScore in scoreOrder:row_cells = table.add_row().cellsrow_cells[0].text = studentNamerow_cells[1].text = str(studentScore)# 添加学生成绩柱状图document.add_picture(picPath, width=Inches(6))document.save('学生成绩报告.docx')if __name__ == "__main__":# 调用信息获取方法,获取用户信息nameList,scoreList = GetExcelInfo()# print("nameList:",nameList)# print("ScoreList:",scoreList)# 将名字和分数列表合并成字典(将学生姓名和分数关联起来)scoreDictionary = dict(zip(nameList, scoreList))# print("dictionary:",scoreDictionary)# 对字典进行值排序,高分在前,reverse=True 代表降序排列scoreOrder = sorted(scoreDictionary.items(), key=lambda x: x[1], reverse=True)# print("scoreOrder",scoreOrder)# 将进行排序后的学生成绩列表生成柱状图GenerateScorePic(scoreOrder)# 开始生成报告picPath = "studentScore.jpg"GenerateScoreReport(scoreOrder,picPath)print("任务完成,报表生成完毕!")

Python-docx 修改旧 word 文档

回顾:打开旧文档,并另存为新文档

我们这里就拿上一节生成的学生成绩报告作为示例:

from docx import Documentif __name__ == "__main__":document = Document('6 学生成绩报告.docx')# 在这里进行操作,此处忽略document.save('修改后的报告.docx')

读取word文档的内容

示例代码:

from docx import Documentif __name__ == "__main__":document = Document('6 学生成绩报告.docx')# 读取 word 中所有内容for p in document.paragraphs:print("paragraphs:",p.text)# 读取 word 中所有一级标题for p in document.paragraphs:if p.style.name == 'Heading 1':print("Heading 1:",p.text)# 读取 word 中所有二级标题for p in document.paragraphs:if p.style.name == 'Heading 2':print("Heading 2:", p.text)# 读取 word 中所有正文for p in document.paragraphs:if p.style.name == 'Normal':print("Normal:", p.text)document.save('修改后的报告.docx')

效果如下:

读取docx中表格内容

示例代码:

from docx import Documentif __name__ == "__main__":document = Document('6 学生成绩报告.docx')# 读取表格内容for tb in document.tables:for i,row in enumerate(tb.rows):for j,cell in enumerate(row.cells):text = ''for p in cell.paragraphs:text += p.textprint(f'第{i}行,第{j}列的内容{text}')document.save('修改后的报告.docx')

效果如下:

修改word中的内容

示例代码:

from docx import Documentif __name__ == "__main__":document = Document('6 学生成绩报告.docx')# 修改 word 中所有内容for p in document.paragraphs:p.text = "修改后的段落内容"# 修改表格内容for tb in document.tables:for i,row in enumerate(tb.rows):for j,cell in enumerate(row.cells):text = ''for p in cell.paragraphs:p.text = ("第",str(i),"行",str(j),"列")print(f'第{i}行,第{j}列的内容{text}')document.save('6.4 修改后的报告.docx')

效果如下:

docx-mailmerge 自动生成万份劳动合同

创建合同模板

  1. 添加内容框架

  1. 创建一个域

  1. 设置域名

  1. 依次全部添加

生成1份证明

示例代码:

from mailmerge import MailMergetemplate = '薪资证明模板.docx'document = MailMerge(template)document.merge(name = '唐星',id = '1010101010',year = '2020',salary = '99999',job = '嵌入式软件开发工程师')document.write('生成的1份证明.docx')

效果如下:

哈哈哈哈!!月入10万,走向人生巅峰~

生成10000份证明

示例代码:

from mailmerge import MailMerge
from datetime import datetime# 生成单份合同
def GenerateCertify(templateName,newName):# 打开模板document = MailMerge(templateName)# 替换内容document.merge(name='唐星',id='1010101010',year='2020',salary='99999',job='嵌入式软件开发工程师')# 保存文件document.write(newName)if __name__ == "__main__":templateName = '薪资证明模板.docx'# 获得开始时间startTime = datetime.now()# 开始生成for i in range(10000):newName = f'./10000份证明/薪资证明{i}.docx'GenerateCertify(templateName,newName)# 获取结束时间endTime = datetime.now()# 计算时间差allSeconds = (endTime - startTime).secondsprint("生成10000份合同一共用时: ",str(allSeconds)," 秒")print("程序结束!")

效果如下:

只花了89秒,平均不到 0.01 就能生成一个!!快

【粉丝抽奖福利】

本次送的是北京大学出版社的《Python入门到人工智能实战》,带你学习Python基础->数据分析(Pandas)->机器学习(Scikit-Learn)->深度学习(PyTorch+Keras)

参与方式

直接拼手气抽奖送3本,11月24日21:00开奖,直接扫码参加↓

中奖提示:活动限不吹牛粉丝参与,24小时内添加小z微信领奖。

●这几个数据源网站你都知道吗!?

●10大Python数据可视化库!

后台回复“入群”即可加入小z数据干货交流群

Python自动化操作Word15000字超强总结,帮你解放双手!(文末送书 )相关推荐

  1. 文末送书 | 当Python遇上高考,会发生什么?

    (文末送书哦!) 延期一个月之后,1071万考生终于熬出头了. 这届高考太难了,不仅考学生,更是考验疫情的防控能力. 但是说到难,2018年浙江省教育厅的一个决定,让不少人感叹真难! 原来早在2017 ...

  2. 文末送书 | 手把手教你玩转,Python 会交互的超强绘图库 Plotly!

    作者:Will Koehrsen,译者:欧剃,编辑:肉松 原文:https://towardsdatascience.com/the-next-level-of-data-visualization- ...

  3. 他一口气写出了这7k字的红黑树总结!看过的都说好!!|文末送书

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 244篇原创分享 作者 l shanhm1991 来源 l Hollis(ID:hollischuang) 红黑树是一种很 ...

  4. Python中处理字符串的常用函数汇总【文末送书】

    正式的Python专栏第23篇,同学站住,别错过这个从0开始的文章! 今天我们说了字符串的基础,格式化,这次我们讲解字符串的常用函数,不要错过! (文本送书,评论区抽取一位送书) 前两篇都在本文同个专 ...

  5. 用python偷偷给班级群女同学的颜值进行排名,排最后的大姐说开学要打爆我(文末送书)...

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 流水不腐,户枢不蠹.--吕氏春秋 ...

  6. 讲讲Python中的函数传递问题 【文末送书】

    正式的Python专栏第25篇,同学站住,别错过这个从0开始的文章! 前篇讲了python中的函数和高阶函数,这篇再把函数的其他部分补充一下,稍微轻松简单一些. 文末评论送书,学委会用这个抽奖程序来进 ...

  7. 基于Python+Keras+OpenCV实现实时人脸活体检测 | 文末送书

    你在互联网上找到的大多数人脸识别算法和研究论文都会遭受照片攻击.这些方法在检测和识别来自网络摄像头的图像.视频和视频流中的人脸方面是非常有效,但是他们无法区分现实生活中的面孔和照片上的面孔.这种无法区 ...

  8. 【文末送书】调参太费力?自动化机器学习来帮你!

    机器学习项目中最折腾人的环节是什么?是特征工程?是模型选择?还是参数调优? 先来看看机器学习项目实战可划分为哪几个具体阶段. <零基础学机器学习>一书将机器学习项目的实战过程归纳如下: 问 ...

  9. 带你了解Python的重要性,就算做测试也要会Python(文末送书)

    名字:阿玥的小东东 学习:Python.C/C++ 主页链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主 目录 人生苦短,我 ...

最新文章

  1. 视频工具ffmpeg
  2. 深入理解Eureka之源码解析
  3. [LAMP]Apache和PHP的结合
  4. 判断整数小数_《除数是整数的小数除法》教学设计
  5. Java 集合系列10: HashMap深入解析(1)
  6. java做服务器端给客户端传数据包_java 服务器怎样给客户端传输数据
  7. python第六章函数课后答案_浙大PTA-Python题库 函数题(6-1~6-6)题解
  8. 为什么大学普遍都教C/C++、Java,而不教Golang、Python、Rust?
  9. U盘分区与启动是怎么回事?
  10. JAVA设计模式之3-抽象工厂模式
  11. ASP.NET伪静态
  12. 台达触摸屏编程软件_松下PLC远程编程调试流程
  13. 基于SSH框架的人力资源管理系统设计与实现
  14. 在普通用户下进入root用户
  15. 第23个520情人节,女程序猿送男朋友什么?
  16. 应用程序正常初始化(Oxc000007b)失败
  17. windows连接虚拟专用网络的方法教程
  18. 300ETF期权和50ETF期权的区别
  19. 江苏科技大学计算机学院院长高尚,江苏科技大学计算机科学与工程学院导师介绍...
  20. linux利用源码安装madplay

热门文章

  1. CAD2010 快捷键
  2. 腾讯云首席架构师黄希彤:云时代的编程模式
  3. ​安利一款追书软件,完全免费的哦
  4. Ubuntu系统学习笔记(完整版)
  5. 用 setTimeout 来实现 setInterval
  6. 第21关 计算自然数的和
  7. 老板客户让加班重做?除了画圈圈诅咒他们,你还可以这么办…
  8. ili9325--LCD寄存器配置研究
  9. zz Web Mapping Illustrated Table of Contents
  10. Unity UGUI 滚动列表