赞
踩
处理Excel、Word、PDF等常用办公软件,处理CSV文件和JSON数据,从Web抓取网络信息,批量处理大量图片,发送电子邮件和短信等等,用Python都可以轻松完成!
光说不练假把式,我举几个有趣的、实用的例子一起看看叭~
假定你有一个很无聊的任务,需要将几十个PDF 文档合并成一个PDF 文档。每一个文档都有一个封面作为第一页,但你不希望合并后的文档中重复出现这些封面。即使有许多免费的程序可以合并PDF,很多也只是简单地将文档合并在一起。
让我们来写一个Python 程序,定制需要合并到PDF 中的页面。
总的来说,程序需要完成以下任务。
从实现的角度来看,代码需要执行以下操作。
针对这个项目,打开一个新的文件编辑器窗口,将它保存为combinePdfs.py。
首先,程序需要取得当前工作目录中所有带.pdf 扩展名的文档列表,并对它们排序。
让你的代码看起来像这样:
在#!行和介绍程序做什么的描述性注释之后,代码导入了os 和PyPDF2 模块①。os.listdir('.')调用将返回当前工作目录中所有文档的列表。代码循环遍历这个列表,将带有.pdf 扩展名的文档添加到pdfFiles 中②。然后,列表按照字典顺序排序,调用sort()时需要带有key/str.lower 关键字参数③。
代码创建了一个PdfFileWriter 对象,以保存合并后的PDF 页面④。最后,使用一些注释语句简要描述了剩下的程序。
现在,程序必须读取pdfFiles 中的每个PDF 文档。在程序中加入以下代码:
针对每个PDF 文档,循环内的代码调用open(),以'wb'作为第二个参数,用读二进制的模式打开文档。open()调用会返回一个File 对象,它被传递给PyPDF2.PdfFileReader(),以创建针对那个PDF 文档的PdfFileReader 对象。
针对每个PDF 文档,程序需要循环遍历每一页,第一页除外。在程序中添加以下代码:
for 循环内的代码将每个Page 对象复制到PdfFileWriter 对象。要记住,你需要跳过第一页。因为PyPDF2 认为0 是第一页,所以循环应该从1 开始①,然后向上增长到pdfReader.umPages 中的整数,但不包括它。
在这些嵌套的for 循环完成后,pdfWriter 变量将包含一个PdfFileWriter 对象,以合并所有PDF 的页面。最后一步是将这些内容写入硬盘上的一个文档。在程序中添加以下代码:
向open()传入'wb',以写二进制的模式打开PDF 文档allminutes.pdf。然后,将得到的File 对象传给write()方法,以创建实际的PDF 文档。调用close()方法,结束程序。
假定你一直“自愿”为“强制自愿俱乐部”记录会员会费。这确实是一项枯燥的工作,包括维护一个电子表格,记录每个月谁交了会费,并用电子邮件提醒那些没交的会员。你不必自己查看电子表格,而是向会费逾期的会员复制、粘贴和发送相同的电子邮件。
让我们用Python编写一个脚本,帮你完成任务。
在较高的层面上,下面是程序要完成的任务。
这意味着代码需要执行以下操作。
打开一个新的文件编辑器窗口,并保存为sendDuesReminders.py。
假定用来记录会费支付的Excel 电子表格看起来如图 18-2 所示,放在名为duesRecords.xlsx的文件中。可以从异步社区本书对应页面下载该文件。该电子表格中包含每个成员的姓名和电子邮件地址。每个月有一列,用来记录会员的付款状态。在成员支付会费后,对应的单元格就记为paid。
该程序必须打开duesRecords.xlsx,通过读取sheet.max_column 属性,弄清楚最近一个月的列。
在文件编辑器窗口中输入以下代码:
记录会员会费支付的电子表格
导入openpyxl、smtplib 和sys 模块后,我们打开duesRecords.xlsx 文件,将得到的Workbook 对象保存在wb 中①。然后取得Sheet1,将得到的Worksheet 对象保存在sheet中②。既然有了Worksheet 对象,就可以访问行、列和单元格了。我们将最后一列保存在lastCol 中③,然后用行号1 和lastCol 来访问应该记录着最近月份的单元格。取得该单元格的值,并将其保存latestMonth 中④。
一旦确定了最近一个月的列数(保存在lastCol 中),就可以循环遍历第一行(这是列标题)之后的所有行,看看哪些成员在该月会费的单元格中写着paid。如果会员没有支付会费,就可以从列1 和列2 中分别抓取成员的姓名和电子邮件地址。这些信息将放入unpaidMembers字典,它记录最近一个月没有交费的所有成员。将以下代码添加到sendDuesReminder.py 中:
这段代码设置了一个空字典unpaidMembers,然后循环遍历第一行之后所有的行①。对于每一行,最近月份的值保存在payment 中②。如果payment 不等于'paid',则第一列的值保存在name 中③,第二列的值保存在email 中④,将name 和email 添加到unpaidMembers 中⑤。
得到所有未付费成员的名单后,就可以向他们发送电子邮件提醒了。将下面的代码添加到程序中,但要代入你的真实电子邮件地址和提供商的信息:
调用smtplib.SMTP()并传入提供商的域名和端口,来创建一个SMTP 对象。调用ehlo()和starttls(),然后调用login(),并传入你的电子邮件地址和sys.argv[1](其中保存着你的口令字符串)。在每次运行程序时,将口令作为命令行参数输入,避免在源代码中保存口令。程序登录到你的电子邮件账户后,就应该遍历unpaidMembers 字典,向未支付会费的会员的电子邮件地址发送针对个人的电子邮件。将以下代码添加到sendDuesReminders.py:
这段代码循环遍历unpaidMembers 中的姓名和电子邮件。对于每个没有付费的成员,我们用最新的月份和成员的名称定制了一条消息,并保存在body 中。输出表示正在向这个会员的电子邮件地址发送电子邮件。然后调用sendmail(),向它传入地址和定制的消息。返回值保存在sendmailStatus 中。
回忆一下,如果SMTP 服务器在发送某个电子邮件时报告错误,sendmail()方法将返回一个非空的字典值。for 循环的最后部分在④行检查返回的字典是否非空,如果非空,则输出收件人的电子邮件地址以及返回的字典。
程序完成发送所有电子邮件后,调用quit()方法,与SMTP 服务器断开连接。
如果运行该程序,输出结果会像这样:
收件人会收到一封关于他们未支付会费的邮件,看起来就像你手动发送的邮件一样。
最后免费分享给大家一份Python全套学习资料,包含视频、源码,课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友。
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
这份完整版的Python全套学习资料已经打包好,需要的小伙伴可以戳下方链接免费领取
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
检查学习结果。
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
这份完整版的Python全套学习资料已经打包好,需要的小伙伴可以戳下方链接免费领取
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。