你用 Python 写过哪些有趣的脚本?
爬虫、抢票、签到,常规的我都干过,事是办全了,但说不上有趣,直到我无意间发现了这个,才真正地打开了新世界的大门。
用Python做脚本是一件比较俗的事情,说到底,就是利用几行代码来解决一些繁琐复杂的问题,好让人腾出时间去干别的事情。
作为一名圈内人,提升效率都是小问题,只要给出需求场景,我们稍微把逻辑理一下,几行代码就能解决了,偶尔还能给圈外人开几个脚本,赚点小零花,但这种简单的乐趣确实满足不了我们。
无奈之下,只能去Github发发牢骚,没想到还真的被我翻到不少真家伙,粗略估计了一下,上千个脚本肯定是有的。
被我挖掘出来的东西,那自然是不能放过的,第一时间就来知乎分享给大家,脚本覆盖领域较多,包括算法、视频、音像、爬虫、web开发、文件处理、可视化、系统…我们待会来简单挑几个看看。
作者致力于打造Python经典小例子和脚本,就是为了告别枯燥,嗯,和我想一块去了。
25天前更新,说明里面的内容时效性有保证,每个项目还对应着难度系数,适合小白在入门的时候进行练习,提升编程能力。
其实这些案例都有给出源码,但有的人老是复制粘贴,单纯地为了解决问题而解决问题,不知道里面几十行代码的架构和逻辑是什么。
我一直给新入门的小伙伴强调,不要把别人的东西生搬硬套,拿到一个源码时,先去看对方为了解决什么问题,用了哪种架构,在语法的表达上选择了哪一种,在确定作者的思路后,你能不能以自己的架构来重建,从而实现相同的功能。
与其望洋兴叹,不如自己动手试试,实践才能出真知。
分享几个小案例:
- 批量压缩文件
import zipfile # 导入zipfile,这个是用来做压缩和解压的Python模块;
import os
import timedef batch_zip(start_dir):start_dir = start_dir # 要压缩的文件夹路径file_news = start_dir + '.zip' # 压缩后文件夹的名字z = zipfile.ZipFile(file_news, 'w', zipfile.ZIP_DEFLATED)for dir_path, dir_names, file_names in os.walk(start_dir):# 这一句很重要,不replace的话,就从根目录开始复制f_path = dir_path.replace(start_dir, '')f_path = f_path and f_path + os.sep # 实现当前文件夹以及包含的所有文件的压缩for filename in file_names:z.write(os.path.join(dir_path, filename), f_path + filename)z.close()return file_newsbatch_zip('./data/ziptest')
- 自动群发邮件
import smtplib
from email import (header)
from email.mime import (text, application, multipart)
import timedef sender_mail():smt_p = smtplib.SMTP()smt_p.connect(host='smtp.qq.com', port=25)sender, password = '113097485@qq.com', "**************"smt_p.login(sender, password)receiver_addresses, count_num = ['guozhennianhua@163.com', 'xiaoxiazi99@163.com'], 1for email_address in receiver_addresses:try:msg = multipart.MIMEMultipart()msg['From'] = "zhenguo"msg['To'] = email_addressmsg['subject'] = header.Header('这是邮件主题通知', 'utf-8')msg.attach(text.MIMEText('这是一封测试邮件,请勿回复本邮件~', 'plain', 'utf-8'))smt_p.sendmail(sender, email_address, msg.as_string())time.sleep(10)print('第%d次发送给%s' % (count_num, email_address))count_num = count_num + 1except Exception as e:print('第%d次给%s发送邮件异常' % (count_num, email_address))continue
smt_p.quit()sender_mail()
注意: 发送邮箱是qq邮箱,所以要在qq邮箱中设置开启SMTP服务,设置完成时会生成一个授权码,将这个授权码赋值给文中的password变量
- melt透视数据小技巧
melt 方法固定某列为一个维度,组合其他列名为另一个维度,实现宽表融化为长表:
zip_code factory warehouse retail
0 12345 100 200 1
1 56789 400 300 2
2 101112 500 400 3
3 131415 600 500 4
固定列zip_code
,组合factory
,warehouse
,retail
三个列名为一个维度,按照这种方法凑齐两个维度后,数据一定变长。
pandas 的 melt 方法演示如下:
In [49]: df = df.melt(id_vars = "zip_code")
若melt方法,参数value_vars
不赋值,默认剩余所有列都是value_vars,所以结果如下:
zip_code variable value
0 12345 factory 100
1 56789 factory 400
2 101112 factory 500
3 131415 factory 600
4 12345 warehouse 200
5 56789 warehouse 300
6 101112 warehouse 400
7 131415 warehouse 500
8 12345 retail 1
9 56789 retail 2
10 101112 retail 3
11 131415 retail 4
若只想查看 factory 和 retail,则 value_vars
赋值为它们即可:
In [62]: df_melt2 = df.melt(id_vars = "zip_code",value_vars=['factory','reta...: il'])
结果:
zip_code variable value
0 12345 factory 100
1 56789 factory 400
2 101112 factory 500
3 131415 factory 600
4 12345 retail 1
5 56789 retail 2
6 101112 retail 3
7 131415 retail 4
melt 透视数据后,因为组合多个列为1列,所以数据一定变长。
方法还很多,我就不一一列举了,感兴趣的朋友们可以自己去Github上面翻翻,说不定就有意外惊喜。
入门小白不需要灰心,在你print出Hello World的那一刻,你已经踏出了编程的第一步,后面的每一步都会因为你第一步的惯性,越走越顺,坚持看完一本书,一套教程,好好跟着案例敲代码,进行理解,编程没有你想的这么难。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
对于0基础小白入门:
如果你是零基础小白,想快速入门Python是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等习教程。带你从零基础系统性的学好Python!
零基础Python学习资源介绍
👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
👉Python必备开发工具👈
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉100道Python练习题👈
检查学习结果。