7 《自学模块案例》
(1)【random模块】
1 # 1.【random模块】 2 import random # 调用random模块 3 a = random.random() # 随机从0-1之间抽取一个小数 4 b = random.randint(0,100) # 随机从0-100之间抽取一个数字 5 c = random.choice('abcdefg') # 得到1个str,c='' 6 # choice 随机从字符串/列表/字典等对象中抽取一个元素(可能会重复) 7 d = random.sample('abcdefg', 3) # 得到1个list[],d=[] 8 # sample 随机从字符串/列表/字典等对象中抽取多个不重复的元素 9 f = [1, 2, 3, 4, 5, 6] 10 random.shuffle(f) # “随机洗牌”,比如打乱列表 11 print(' ')
(2)【csv模块 -Excel表格.csv】-猫砂、收件人
1 # 2.【csv模块 -Excel表格.csv】 2 ## (1)猫砂 3 import csv 4 with open('sample/Excel.csv','r',newline='') as f: 5 r=csv.reader(f) # a按表格的行读取 6 for i in r: 7 print(i) 8 ### 下面是读取内容: 9 # ['商品编号', '商品名称', '单价', '库存', '销量'] 10 # ['1', '猫零食', '12', '3313', '5164'] 11 # ['2', '普通猫粮', '33', '5055', '2231'] 12 # ['3', '猫粮四合', '187', '212', '334'] 13 14 ### 要存放2行 15 with open('sample/Excel.csv','a+', newline='') as f: 16 # with open('sample/Excel.csv','w+', newline='') as f: 17 # 写入方式w/a都可以,因为没有循环for 18 w=csv.writer(f) # <class list>嵌套列表 19 # 按行写入 20 w.writerow(['4', '猫砂', '25', '1022', '886']) 21 w.writerow(['5', '猫罐头', '18', '2234', '3121']) 22 with open('sample/Excel.csv','r', newline='') as f: 23 h=csv.reader(f) # <class list>嵌套列表 24 for i in h: 25 print(i) 26 27 ## (2)写入、读取收件人 28 import csv 29 data=[['收件人','邮箱'],['刘','702352870@qq.com'],['杨','1427369427@qq.com']] 30 ## excel表格.csv文件写入要 列表嵌套 31 with open('sample/recipient.csv','w',newline='') as a: 32 # with open('sample/recipient.csv','a',newline='') as a: 33 # 如果是'a'则第一行就是空的??'w'就没有这个bug!! 34 # 因为有循环for,也算写入一行,没有输出就返回空行!! 35 b=csv.writer(a) # 写入内容放入b 36 # 按行写入 37 for i in data: # i=['收件人','邮箱'] 38 b.writerow(i) 39 with open('sample/recipient.csv','r',newline='') as a: 40 c=csv.reader(a) # 读取内容放入c 41 for i in c: 42 print(i)
(3)【time模块 -时间戳】
1 # 3.【time模块 -时间戳】 2 import time 3 input("欢迎使用“时间管理器”!请按enter继续") 4 # 必须是input,不能是print,只要不按enter就一直等待 5 with open('sample/time_record.txt','a') as f: 6 task = input('你要做什么事情:') 7 t = int(input('你要几分钟完成?1,2,3,4...:')) 8 time.sleep(1) 9 a=input('此次任务信息: task:%s time:%dmin 按enter开始计时'%(task,t)) 10 f.writelines('此次任务信息: task:%s time:%dmin '%(task,t)) 11 if a =='': 12 print('计时开始(s):') 13 sta=time.time() # 时间戳time.time(),1548730796.4549906 14 start_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(sta)) 15 # 墙上时间time.strftime(time.localtime(time.time())),比如2019-1-29 16 ## time.localtime(sta) # 当地时间time.localtime(time.time()),非正式格式,运行如下: 17 ## time.struct_time(tm_year=2019,tm_mon=1,tm_mday=29,tm_hour=10,tm_min=59,tm_sec=56,tm_wday=1,tm_yday=29,tm_isdst=0) 18 for x in range(60*t,-1,-1): 19 daojishi='倒计时'+str(x)+'s' 20 time.sleep(1) 21 ## 下面2行是输出一行,同时清理掉输出的内容: 22 ## print(daojishi,end='') 23 ## print('b'* (len(daojishi)*2) ,end='',flush=True) 24 ## 'b'是【退格功能】的转义字符,退格(len(daojishi)*2)次, 25 ## 因为中文字符占2byte,字母数字就不*2,flush=True开启缓冲区 26 print("叮咚,time's up!") # 规定时长 27 b=input('你完成任务了吗?完成请按enter:') 28 if b=='': 29 end=time.time() 30 end_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(end)) 31 used_time=(end-sta)/60 # 实际时长 32 time_range=start_time+'——'+end_time # 2019-01-29 10:49:11——2019-01-29 10:49:35 33 record0='预计完成:'+str(t)+'min 实际用时:'+str(used_time)+'min' 34 record1='时间段:'+time_range 35 f.writelines(record0+' '+record1) 36 print(record0+' '+record1) 37 print('愿被你善待的时光,予你美好的回赠。')
(4)【stmplib /email模块 + MIMEText/Header函数 -写发QQ邮件】
C. 发一封完整邮件
1 ## 1. 发一封完整邮件 2 import smtplib # 按住ctrl+点击smtplib出现模块解释 3 # (1)链接服务器 4 a = smtplib.SMTP(host,port) # 默认TSL加密方式 5 a = smtplib.SMTP_SSL(host,port) # 若端口是SSL加密,请这样写代码。 6 # host是目标邮件的【服务器地址】,port是【端口=整数】 7 # 若编码错误UnicodeDecodeError,就酱写server.connect('smtp.qq.com',465,'utf-8') 8 9 # (2)登录邮箱 10 a.login(account, password) # account:账户 password:授权码 11 12 # (3)编译标题、正文、收件人,发件人昵称 13 from email.mime.text import MIMEText # 纯文本正文内容 14 from email.mime.image import MIMEImage # 图片 15 from email.mime.multipart import MIMEMultipart # 多形式组合 16 from email.header import Header # 头部信息 17 18 message=MIMEText(msg,type,chartset) 19 # msg:文本内容,a.text 20 # type:文本类型,默认为'plain'(纯文本) 21 # chartset:文本编码,中文“utf-8” 22 message['subject']=Header(subject,'utf-8') 23 message['from']=Header(sender,'utf-8') 24 message['to']=Header(to_addr,'utf-8') 25 26 # (4)发送,退出 27 a.sendmail(sender,to_addr,message.as_string()) 28 # from_addr:邮件发送地址,就是上面的username='xxx.qq@com' 29 # to_addr:邮件收件人地址,'yyy.qq@com' 30 # msg.as_string():为一个字符串类型 31 a.quit()
D. 群发邮件【文件读写.txt.csv】
1 import smtplib,csv 2 from email.mime.text import MIMEText 3 from email.header import Header 4 ### 1.链接服务器(地址+端口+加密方式) 5 aaa=smtplib.SMTP_SSL('smtp.qq.com',465) 6 7 ### 2.登录(.txt文件读取账户密码) 8 with open('sample/QQ登录.txt','r') as a: 9 b=a.readlines() #['702352870@qq.com njzrpkumldghbfii 上好佳'] 10 b=b[0].split(' ') #['702352870@qq.com', 'njzrpkumldghbfii', '上好佳'] 11 account=b[0] # 702352870@qq.com 12 passwords=b[1] # njzrpkumldghbfii 13 sender=b[2] # 上好佳 14 aaa.login(account,passwords) 15 16 ### 3.读取收件人、正文,并编辑好 17 ## (1)写入 18 data=[['name','qq','subject','text'],['刘','702352870@qq.com','今天','今天几号?'],['杨','1427369427@qq.com','明天','明天几号?']] 19 ## excel表格.csv文件写入要 列表嵌套 20 with open('sample/recipient.csv','w',newline='') as a: 21 # with open('sample/recipient.csv','a',newline='') as a: 22 # 如果是'a'则第一行就是空的??'w'就没有这个bug!! 23 # 因为有循环for,也算写入一行,没有输出就返回空行!! 24 b=csv.writer(a) # 写入内容放入b 25 # 按行写入 26 for i in data: # i=['收件人','邮箱'] 27 b.writerow(i) 28 29 ## (2)读取 30 recipient0=[] # 表格第1列-收件人… 31 subject0=[] # 表格第2列-标题… 32 text0 = [] # 表格第3列-内容… 33 with open('sample/recipient.csv','r',newline='') as a: 34 c=csv.reader(a) # 读取内容放入c 35 for i in c: # 按行读取 36 recipient0.append(i[1]) # 表格第1列-收件人… 37 subject0.append(i[2]) # 表格第2列-标题… 38 text0.append(i[3]) # 表格第3列-内容… 39 recipient=recipient0[1:] # 1 收件人:['702352870@qq.com', '1427369427@qq.com'] 40 subject=subject0[1:] # 2 主题:['今天', '明天'] 41 text=text0[1:] # 3 正文:['今天几号?', '明天几号?'] 42 43 ### 4. 编辑发送,退出 44 try: 45 for i in range(len(text)): # 容易丢range() 46 msg=MIMEText(text[i],'plain','utf-8') # text 47 msg['subject']=Header(subject[i],'utf-8') # subject 48 msg['from']=Header(sender,'utf-8') # from-account 49 msg['to']=Header(recipient[i],'utf-8') # to-recipient 50 aaa.sendmail(account,recipient[i],msg.as_string()) 51 print('发送成功!撒花~') 52 except: 53 print('发送失败,请检查程序后重试~~') 54 aaa.quit()
(5)【MyQR模块=动态二维码】
1 from MyQR import myqr 2 # import os 3 myqr.run( 4 words='happy newyear', # str类型,链接or句子作为参数,中文?? 5 # 扫描二维码后,显示的内容,或是跳转的链接 6 # 输入中文字符串会报错,怎么解决?? 7 # ValueError: Wrong words! Make sure the characters are supported! 8 version=1, # 整型, from 1 to 40 二维码边长 9 level='H', # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高 10 picture='1.gif', # str, 二维码背景图{'.jpg', '.png', '.bmp', '.gif'} 11 colorized=True, # bool 黑白(False)还是彩色(True) 背景图颜色 12 contrast=1.0, # float 图片对比度和亮度,1.0表示原始图片 13 brightness=1.0, # float 图片亮度 14 save_name='11.gif', # str, 生成二维码文件名 15 save_dir='sample' #str,输出路径 16 #save_dir=os.getcwd() #控制位置 17 )