大家好,接下来我们来学习如何使用python 实现自动化办公,而不需要我们人工,或者说尽量减少我们人工的参与。(文末领读者福利)
自动化办公在我们的生活中非常的常见,让我们看看通过本博客你可以学习到python哪些自动化操作。
看完这幅图,大家就会发现,其实自动化处理,用的都是我们非常常用的一些办公工具,将它们自动化了。
首先我们先来学习普通的文件操作,那什么是属于普通的文件操作呢?
像 .txt /.ty 我们可以直接打开的文件看到里面具体信息的文件,我们都可以认为它们都是属于普通的文件。
既然有普通文件,就说明有不普通的文件,哪些又是不普通的文件呢?
例如:.docx / .xlsx / .psd / .ppt 我直接把它们放到IDE 里是看不到内容的,必须得用特定软件打开才行。
看过我以前博客的小伙伴都知道我们 os 这个模块,通过这个 os 模块我们可以对我们的系统文件或者一些命令进行操作。
那么在这里我们再去学习一个更加细粒度的去操作文本文件的模块,可以说,它是在OS 操作文本文件的基础上进行了升级,它的名字是 : shutil 。
shutil 是 python 3.8 的 内置模块,如果你正好 >= 这个版本,就不需要额外安装。
接下来我们就要使用到 shutil 这个模块来帮助我们进行文件的复制。
使用步骤:
导入包与模块:
使用方法 : copy(来源文件,目标地址)
这里我们要注意的是,来源文件一定要是一个绝对路径和相对路径,而目标地址可以不包含具体的文件名。
代码演示:
这里将 test1.txt 复制到 test1 文件夹下。
image-20221107173554810
如何进行文件内容的复制?其实很简单。
image-20221107173932385
我们将获取目标地址改成 xxx.txt 。
image-20221107174013742
执行
image-20221107174042404
这样就实现了文件内容的复制,但是其实 shutil 有专门的函数来帮我们进行文件内容的复制。
使用步骤:
导入包与模块:
使用方法 : copyfile(来源文件,目标文件)
这里就跟我们的 copy 有一定的区别了, 我们的copy的目标可以是一个文件夹也可以是一个文件,而 copyfile 只能是一个文件。这就是它们的一个区别。
代码演示:
xxx.txt:
image-20221107175124258
text1.txt:
image-20221107175145755
代码:
image-20221107175331433
运行结果:
image-20221107175346134
接下里我们学习一下文件的裁剪,所谓文件的裁剪就是从一个目标路径的文件 A 移动到 目标路径 B 中 去。
A 和 B 名称可能是相同的,也可能是不同的,当移动后 A 目标 这个路径下就不存在这个文件了,只存在目标 B 这个文件下。
当然,它也支持目标 A 裁剪到 直接裁剪到 目标 A ,但是它额可以支持将 目标 A 这个路径下的这个文件名称进行改变,所以它也是一个变相的重命名。
使用步骤:
导入包与模块:
使用方法 : move(来源地址,目标地址)
这里我们发现move 的使用方法跟我们的copy 的使用方式 其实是大同小异的,接下来我们来看看代码演示。
代码演示:
image-20221109094541216
执行效果:
image-20221109094850623
我们会发现 xxx.txt 文件已经移动到 test1 目录下了。
我们还可以实现移动的时候重命名。
现在我们来学习文件的删除。
在 shutil 中,其实不支持一个单独的文件删除的,那该怎么办?
问题不大,我们可以用其他的方法帮助我们完成文件的删除。例如 os 包中的 remove 模块。
使用步骤:
导入包与模块:
使用方法:remove(目标文件)
使用方法非常简单,我们直接看代码效果即可。
image-20221109095927329
执行效果:
image-20221109100004484
接下里我们来学习文件压缩与解压缩。
我们先来看看文件压缩的函数。
导入包与模块:
使用方法:make_archive(压缩之后的文件名,压缩后缀,希望压缩的文件或目录)。
返回值:生成的压缩包地址。
代码演示:
image-20221109140709663
执行效果:
image-20221109140802320
这里我们就对这个文件目录完成压缩的操作,那么接下来我们就对这个压缩包进行解压缩。
导入包与模块:
使用方法:unpack_archive(要解压的文件,解压后的路径)
代码演示:
image-20221109141336066
执行效果:
image-20221109141359585
文件的查找我们要借助另一包 glob 来帮助我们实现。
glob 是一个快速查找文件夹中内容的包,我们可以通过模糊查找的形式找到我们想要的内容。
我们看看如何使用。
导入包与模块。
使用方法:glob(任意目录)
返回内容:指定路径下的内容列表,不存在的路径返回空列表。
代码演示:
image-20221109150825740
*号就是我们学过的通配符,代表查询当前文件下所有文件。
我们还可以在通配符后面加上我们要查询的文件格式。
image-20221109151019630
或者我们不使用通配符,直接指定我们要查找的文件。
image-20221109151138250
很多情况下我们知道文件名字,但是不知道文件在什么地方,我们就可以使用递归的方式进行查找。
执行效果:
文件中包含某些关键字,但是我们知道文件名个所在路径,这下该如何查找呢?
其实这跟我们递归查找指定文件差不多,但是得稍微改造一下代码。
我在def.txt 中写入: YiQie99903
代码编写:
这段代码查找一个目录(和子目录)下的所有文件,并在文件中搜索包含指定字符串(“YiQie99903”)的文件。
首先,它使用os.path.join函数和os.getcwd函数组合出目录的路径,然后使用glob函数查找所有匹配指定路径的文件和目录。
然后,它使用os.path.isdir函数判断一个文件是否是目录。如果是目录,则使用_path变量继续查找子目录;如果不是目录,则打开文件并使用read函数读取文件内容。如果搜索字符串出现在文件内容中,则将文件的路径添加到final_result列表中。
最后,它返回最终的结果列表final_result。
该代码使用了递归,即查找函数自身调用自身,从而查找目录下的所有子目录。如果查找到的是一个文件,则打开文件并搜索指定字符串。
该代码还使用了try-except语句块来捕获异常,以处理不可读的文件。
执行效果:
image-20221109161045410
在我们对电脑的日常使用中,多多少少产生一些重复的文件占用我们的硬盘,对它们进行及时的清理,也可以节省我们的硬盘空间。
那我们该如何进行操作呢?
首先我们不知道重复的文件在什么地方,也不知道有没有重复的文件。
我们可以从指定路径或者最上层路径开始读取,利用 glob 读取每个文件夹,读到文件,记录名称和大小,每次都监测之前是否读过相同的文件,如果存在,判断大小或者内容是否相同,相同,我们就认为它就是一个重复的文件,则删除。
了解了基本流程,我们进入代码实操。
这段代码实现了对指定目录下的文件的遍历,并对遍历到的文件进行文件内容的校验,如果文件内容相同,就删除其中一个文件。
在这段代码中,首先使用了 glob 库中的 glob 函数,它可以用来遍历指定目录下的文件。
然后使用了 hashlib 库中的 md5 函数,对文件的内容进行哈希。
接着,对每一个遍历到的文件,都使用 open 函数打开该文件,并使用 read 函数读取文件内容。
最后,使用 os 库中的 remove 函数,删除文件。
首先我们知道文件名需要修改的指定字符串,至于实现方法,那当然是通过循环,将目标字符串加入到文件名并进行修改。
来看看代码执行效果
image-20221204132815239
代码执行:
image-20221204132843768
前面我们学习了文件的管理,现在我们来学习一下如何使用 shutil 实现对文件夹的管理。
导入包与模块:
使用方法:copytree(来源目录,目标目录)
执行效果:
导入包与模块:
使用方法:rmtree(目标目录)
代码演示:
image-20221109143326278
执行效果:
image-20221109143341404
值得注意的是,我们的目标目录一定要存在,否则会报错。
导入包与模块:
使用方法 : move(来源目录,目标目录)
这里我们发现文件夹的裁剪跟我们文件裁剪的使用函数其实是一样的。
代码演示:
image-20221109144059700
执行效果:
image-20221109144211466
这里我们发现 test2 整个文件夹都移动到了test1 这个目录下。
如果目标目录不存在,那就是对原来的目录进行重命名。
而且我们还可以移动的同时并重命名。
接下来我们来学习如何使用python 来操作 word 文档,这里就要介绍一个 python Word 操作利器之 python - docx。
要想使用 python-docx,要先进行下载安装。
我们来学习一下如何读取word 文档,这里我们要用到是的 pythton-docx 之 document
首先要导入包和模块:
使用方法:
返回值 : word 文件对象。
接下来我们先进行对word 段落内容的读取。
来看看我随便准备的一个word 文档。
image-20221204135636893
接下来我们练习一下如何将这个word 段落里的内容读取出来。
image-20221204140511778
这些我们可以看到段落内容已经被我们读取出来了。
表格内容的读取。
image-20221204141137089
学习如何读取 word 的段落内容 + 表格 的内容读取,接下来我们就要做一个简历筛选的小练习。
首先我们知道想要查找包含指定关键字的简历。比如 简历中包含 python , 爬虫 这样的关键字。
如何实现呢?
其实也很简单,我们直接批量读取每一个word (通过glob 获取 word信息 ), 将他们所有的可读内容 获取,并通过关键字方式筛选,拿到目标简历地址。
这里我随便从网上下载了两份简历,用作练习。
image-20221204142910575
image-20221204142946403
接下来我们来学习如何通过python 脚本自动生成一个word 文档。
我们先来想想,一个word 文档会有哪些内容。
标题 、 段落 、 图片 、 表格 、分页。
3.3 .1 标题
首先我们来看看如何生成标题。
我们来看看执行效果:
image-20221204154400525
3.3 .2 段落
添加好标题之后,接下来我们就可以添加段落了。
执行效果:
image-20221204154945118
3.3 .3 图片
接下来学习如何添加图片。
执行效果:
image-20221204155921804
3.3 .4 表格
添加表格
执行效果:
image-20221204161651650
3.3 .5 分页
image-20221204161852290
以上就是我们学习如何创建一个word 的相关内容了。
接下来我们来学习给我们的word 文档添砖加瓦,让其变得更好看些。
3.4.1 全局样式
我们来看看执行效果:
image-20221204163351818
我们可以看到,字体的颜色,大小,字体都发生的改变,除了标题,这是一个标题的特殊性,后面会为大家讲解。
3.4.2 文本样式
文本样式 包括 标题和段落。
执行效果:
image-20221204175032161
如果大家还想知道有哪些样式,可以通过 dir(对象) 命令。
image-20221204175221428
3.4.3 图片样式
我们不能直接对图片进行样式改造,需要借助段落帮助我们才行。
这段代码使用python-docx库创建一个Word文档,并向文档中添加标题、图片和文本。
首先,它使用add_heading函数创建一个标题,并使用alignment属性将标题居中。然后,它使用style属性和font属性设置标题的字体大小。
然后,它使用add_run函数向标题中追加内容,并使用italic属性和bold属性设置内容的倾斜和加粗。
接下来,它使用add_paragraph函数创建一个段落,并使用alignment属性将段落设置为居右。然后,它使用add_run函数向段落中追加内容,并使用add_picture函数添加一张图片。
最后,它使用save函数保存文档。
执行效果:
image-20221204182105722
3.4.4 表格样式
表格样式有很多,我们可以通过下面的方式来获取都有哪些表格样式。
执行结果:
以上都是表格样式,我们挑一两个来试试。
image-20221204182758382
执行效果:
image-20221204182811927
首先我们要认识一下 PDF 工具包 - pdfkit
安装好pdfkit后,我们还需要一个依赖的工具。
下载链接:wkhtmltopdf
大家根据自己的系统下载对应的安装包。
3.5.1 网址 转 PDF
代码演示:
执行效果:
3.5.2 HTML字符串 转PDF
执行效果:
image-20221204191705792
3.5.1 WORD 转 PDF
首先我们要安装一个新的依赖包:
代码演示:
这段代码使用pdfkit库将两个Word文档(简历1.docx和简历2.docx)转换成PDF格式。它使用了两个步骤:
- 将Word文档转换成HTML:首先,它使用PyDocX库的to_html函数将Word文档转换成HTML字符串。然后,它使用open函数打开一个名为"html1.html"的文件,并使用write函数将HTML字符串写入该文件。最后,它使用close函数关闭文件。
- 将HTML转换成PDF:首先,它使用pdfkit库的from_file函数从"html1.html"文件中读取HTML字符串,并使用pdfkit库的from_string函数将HTML字符串转换成PDF格式。
注意,pdfkit库需要wkhtmltopdf工具来进行转换。因此,你需要在代码中指定wkhtmltopdf工具的位置(在这段代码中,wkhtmltopdf工具位于"D:installPathwkhtmltopdfbinwkhtmltopdf.exe")。
接下来我们学习 Python 对Excel 的操作,这里又要给大家介绍一个新模块 xlrd .
为什么指定版本呢? 因为更高的版本有可能会发生不兼容的情况。
使用方法:
返回:excle 对象
4.1.1 获取工作簿
既然已经获取到了Excel 对象,我们都知道在每个Excel 里面都有很多个工作簿,那怎么获取里面的工作簿呢?
代码编写:
执行效果:
4.1.2 读取工作簿内容
现在我们已经获取工作簿,接下来我们就来学习如何获取工作簿里面的内容。
代码执行:
这段代码打开了一个名为"技术新鲜事(一切总会归于平淡)_用户明细_20221204.xlsx"的Excel文件,然后使用sheet_by_name函数获取名为"用户明细"的工作表。它打印了工作表的名称,然后使用nrows和ncols属性获取工作表的总行数和总列数,最后使用get_rows函数遍历工作表的每一行,并将每一行的内容打印出来。
注意,get_rows函数返回的是一个生成器,因此你需要使用for循环遍历每一行。对于每一行,你可以使用for循环遍历每一个单元格,并使用value属性获取单元格的值。
执行效果:
image-20221204202824285
接下来我们学习 Python 对Excel 写入数据的操作,这里又要给大家介绍一个新模块 xlsxwriter.
4.2.1 常用函数
4.2.2 代码书写
这段代码实现了从一个名为"技术新鲜事(一切总会归于平淡)_用户明细_20221204.xlsx"的Excel文件中读取数据,然后将读取到的数据写入另一个名为"test.xlsx"的Excel文件中。
它首先使用xlrd库打开名为"技术新鲜事(一切总会归于平淡)_用户明细_20221204.xlsx"的Excel文件,然后使用sheet_by_name函数获取名为"用户明细"的工作表。接下来,它使用get_rows函数遍历工作表的每一行,将每一行的内容读取到一个列表中,然后将该列表添加到另一个列表中,最终得到一个二维列表。
然后,它调用write函数,使用xlsxwriter库创建一个名为"test.xlsx"的Excel文件,并在该文件中添加一个名为"test"的工作表。然后,它遍历传入的二维列表中的每一个元素,并将它们写入工作表中的相应位置。最后,它使用close函数关闭excel对象,保存文件。
学习完如何书写一个excel 文件 ,我们来看看如何在excle 上生成一个比较简单的图表。
4.3.1 常用函数
我们先来看看所需要的几个函数。
add series()的参数:
=Sheet1!1:4 : 这是一个 Excel 单元格引用。它表示 “Sheet1” 工作簿中的第一列,即从第一行到第四行的所有单元格。其中 “1” 和 “4” 分别表示第一列的第一行和第四行,“表示第一列,1” 和 “$4” 分别表示第一行和第四行。
4.3.2 图表样式
4.3.3 代码书写
这段代码使用了 Python 的 xlsxwriter 库来创建一个名为 “test.xlsx” 的 Excel 文件,并在其中添加了一个工作簿,命名为 “用户角色”。然后在该工作簿中写入了两列数据。接着,它创建了一个饼图,将数据源设为工作簿中的第一列和第二列,并将图表插入到工作簿中。最后,关闭了 Excel 对象。
执行效果:
image-20230102172929213
从现在开始我们就来学习PPT 的自动化操作。
这里就要用到python PPT操作利器之 python - pptx 。
这段 Python 代码,它会创建一个 pptx.Presentation 对象,再设置布局并添加一张幻灯片,最后保存为 test.ppt 文件。
布局是指幻灯片的外观,我这里最多是11 种布局(可能跟我的pptx版本或者ppt 版本有关)。可以使用 pptx.Presentation.slide_layouts 属性访问幻灯片布局,这个属性是一个列表,每一项都是一个 SlideLayout 对象,列表中第 7 项就是第 7 种布局。
使用 pptx.Presentation.slides.add_slide() 方法可以向幻灯片集合添加一张幻灯片,这个方法需要指定一个布局。
最后使用 pptx.Presentation.save() 方法保存幻灯片。
执行效果:
这段代码用于创建一个 PowerPoint 文件,并在该文件中添加一张幻灯片。在幻灯片中,有一个标题和两个文本段落。
首先,使用 库导入了需要的模块。然后,使用 函数创建了一个 PowerPoint 对象,并通过使用幻灯片布局类型 1(第二种),使用 函数向其添加了一张幻灯片。
在幻灯片中,使用 和 获取标题和第一个文本段落,并使用 属性指定其文本内容。然后,使用 函数为第一个文本段落添加了一个新段落,并使用 属性设置了该段落的文本格式,如字体大小、是否加粗、是否倾斜、是否有下划线以及文本颜色。
使用 属性设置了文本的对齐方式。最后,使用 函数将该幻灯片保存为文件 “test.ppt”。
执行效果:
image-20230102191746476
这段代码创建了一个 PowerPoint 幻灯片文件,并使用 Python 的 python-pptx 库进行操作。
首先,使用 函数创建了一个 PowerPoint 对象,并使用 属性选择了一个布局(在本例中为布局 1)。然后,使用 函数将一张幻灯片添加到演示文稿中。
接下来,使用 属性获取幻灯片中的标题和段落,并设置其文本内容。
然后,再次使用 函数创建了另一张幻灯片,并使用 函数将一个表格添加到幻灯片中。接着,使用嵌套循环遍历表格的所有单元格,并使用 方法设置单元格的文本内容。
接着,又使用了 函数创建了另一张幻灯片,并使用 函数将一张图片插入到幻灯片中。在这里,您指定了图片文件的路径,并使用 对象指定了图片的位置和尺寸。
最后,使用 方法将演示文稿保存到文件中。
执行效果:
image-20230102195230658
这段代码是在解析一个 PowerPoint 文件,然后打印出所有幻灯片中的文本内容。
首先,它使用了 pptx 库来打开 PowerPoint 文件。然后,它遍历了所有幻灯片,对于每一张幻灯片,再遍历所有形状。对于每个形状,如果它有文本框,就打印出文本框中的文本;如果它有表格,就遍历表格中的所有单元格,并打印出单元格中的文本。
接下来我们来学习python对邮件的操作。
让我们来看看又可以认识哪些新模块吧。
- smtplib:邮件协议与发送模块
- email:内容定义模块
- schedule:定时模块
发送邮件的流程
常见的邮件的协议有:
- SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,是一种用于发送邮件的应用层协议。它使用了一组专用的命令来指定邮件的发件人、收件人以及其他相关信息,并使用 TCP 协议传输数据。
- IMAP(Internet Mail Access Protocol):互联网邮件访问协议,是一种用于访问远程邮件服务器上的邮件的应用层协议。它提供了一组命令,用于从服务器上检索、操作和删除邮件。
- POP3(Post Office Protocol version 3)是一种应用层协议,用于从远程邮件服务器接收邮件。它是邮局协议(POP)的第三个版本,是目前使用最广泛的版本。
什么是协议?
协议就是一种规则已经被底层网络封装好,我们无需关心他的具体规则是什么,直接使用上层工具即可。
登录网易邮箱,点击设置。
选择POP3/SMTP/IMAP
image-20230102232114820
找到 SMTP 设置,将其开启。
image-20230102232211059
然后你就看到一串复制保存,后续代码会用到。
首先,它会使用 模块连接到你的 SMTP 服务器,然后使用你的邮箱账号和密码登录。
然后,它会使用 类创建一个电子邮件对象,该对象包含了邮件的文本内容、文件内容格式和编码格式。
最后,它会调用 函数发送邮件。这个函数需要三个参数:发件人地址、收件人地址(可以是一个列表,表示同时发送给多个人)和邮件正文。
在代码中,邮件正文是通过调用 方法将电子邮件对象转换为字符串的形式传递的。
如果发送邮件过程中出现了任何错误,就会抛出 异常。你可以使用 语句来捕获这个异常,并在出错时打印错误信息。
这里就改造了一下 message = MIMEText()。
这段代码演示了如何使用 Python 发送带附件的邮件到网易邮箱。
首先,它使用 类创建了一个电子邮件对象,这个对象可以同时包含文本内容和附件。
然后,它使用 类创建了一个文本内容对象,并使用 函数将本地文件作为二进制数据读入。
接着,它使用 对象的 和 属性设置了附件的文件类型和文件名。
最后,它使用 方法将文本内容对象和附件对象添加到电子邮件对象中,并使用 函数发送邮件。
和之前的代码一样,如果发送邮件过程中出现了任何错误,就会抛出 异常,使用 语句来捕获这个异常,并在出错时打印错误信息。
这里我们又要认识一个新的库:schedule。
Python 的 schedule 库支持以下时间格式:
例如,你可以使用以下代码在每周一的 00:00 运行一次任务:
你也可以使用 crontab 格式来指定更精细的时间,例如每隔 10 分钟运行一次:
在上面的代码中,while 循环被用来不断检查是否有挂起的任务需要执行。
每当你使用 这样的语句来安排任务时,schedule 库会将这个任务添加到一个挂起任务列表中。然后,你可以使用 函数来检查是否有挂起任务的执行时间已经到了,如果有,就执行这个任务。
所以为了不断检查是否有挂起任务需要执行,我们使用了一个无限循环。在这个循环内部,我们每次都调用 函数来检查是否有挂起任务需要执行,然后再调用 函数来睡眠一段时间。
这样做的好处是,在程序启动后,schedule 库就会不断地检查是否有挂起任务需要执行,并在到达执行时间时立即执行这个任务。这使得你可以很方便地使用 schedule 库来安排周期性任务,而不需要手动去检查是否有任务需要执行。
当然,你也可以使用其他方法来实现这个功能,例如使用多线程或者使用第三方库等。但是,使用 schedule 库可以让你省去很多麻烦,使得安排周期性任务变得非常简单。
image-20230103000554711
错误原因:
运行debug调试找到 socket.py 这个文件的第676行:
image-20230103000732402
上图中’name’ 这个参数编码错误,这个name参数好像是来自于自己计算机的名称,我的电脑名称是中文。
方法:建议一步到位直接把自己电脑名字改成英文字母,很多涉及到网络的代码都会报编码错误(我的系统是win11)
-END-
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、自动化测试带你从零基础系统性的学好Python!
👉[CSDN大礼包:《python安装工具&全套学习资料》免费分享](安全链接,放心点击)
👉Python学习大礼包👈
👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以点击链接免费领取或者保存图片到wx扫描二v码免费领取 【】