1.导入模块原理
# 1.python中模块类型: # python中模块分为3种,1、标准模块(python自带的模块 如:os time等),2、第三方模块(如pymysql、xlrd等), 3、自己写的模块(一个python文件就是一个模块) # 2.导入导入模块的实质 # 就是把所导入的模块运行了一遍 # 3.导入模块的顺序 # 1,先从当前目录下找 # 2,再从python的环境变量下找(python环境变量查看方法:import sys print(sys.path)),模块放到环境变量中任意一个目录下都可以 # 而且放到环境变量下导入的时候会自动提示,而且不会像导入当前目录下python文件那样被标红色波浪线(虽然不影响执行^_^) # 注意:2中所说的环境变量跟咱们系统的环境变量不是一回事!!! # 4.if __name__ == '__main__': # 的作用就别的文件里面导入这个python文件的时候 # 不会执行if __name__ 里面代码 # 而当前文件的测试代码,如函数调用可以写在这里就算忘记删除了,等别人调用的时候也不会被执行
2.手动安装模块、导出模块
# 安装第三方模块有以下两种方法: # 1,在线安装:执行命令 pip install 模块名 如果是python的话执行命令 pip3 install 模块名 (例:pip3 install xlrd) # 2,手动安装(也有2种方式) # 1)下载.whl文件到本地 # 执行命令 pip install 本地文件目录(例:pip install e:\\dowloads\\pymysql.whl) # 2)下载.tar.gz文件 # 1、解压 (例:tar -zxvf pymysql.tar.gz) # 2、进入解压后的文件夹 # 执行命令:python setup.py install
# pip list 列出当前安装了哪些模块
# pip freeze > /Users/wangxiaoyu/百度云同步盘/pyton测开/day5/pip_intall_list.txt 把安装的模块导出到执行文件
# pip intall -r /Users/wangxiaoyu/百度云同步盘/pyton测开/day5/pip_intall_list.txt 把指定文件中的所有模块进行批量安装
3.操作数据库(mysql数据库,需要实现安装第三方模块pymysql)
import pymysql #(不同的数据库需要导入不同的模块,用法也可能有些区别) # ==========查询========== # 1.建立链接,port可以不写,默认是3306(是个默认值参数) conn = pymysql.connect(host='118.26.3.60',port=3306,user='wxy',password='123456',db='python_mysql',charset='utf8') # 2.建立游标 cur = conn.cursor(pymysql.cursors.DictCursor)#设置返回结果为list,list的中的元素为字典格式,conn.cursor()不设置返回结果格式的话,默认返回的是二维数组 # 3.执行sql----查询 sql = 'select * from app_student where name = "wangxiaoyu"' cur.execute(sql) # 4.获取sql执行结果 print(cur.fetchall())#获取所有结果,结果:[{'id': 387, 'name': 'wangxiaoyu', 'sex': '女', 'age': 18, 'addr': '北京', 'grade': '摩羯座', 'phone': '那啥啥', 'gold': 100}] print(cur.fetchone())#获取一条结果,直接是一个字典而不是在list中,结果:{'id': 387, 'name': 'wangxiaoyu', 'sex': '女', 'age': 18, 'addr': '北京', 'grade': '摩羯座', 'phone': '那啥啥', 'gold': 100} print(cur.fetchmany(2))#如果查询结果是多条的话,这里可以选择显示几条 # 5.关闭游标 cur.close() # 6.关闭链接 conn.close()
# ==========修改(增加、删除、修改都必须提交后才能真正写到数据库)========== # ====方法1.手动提交======= # 1.建立链接,port可以不写,默认是3306(是个默认值参数) conn = pymysql.connect(host='118.26.3.60',port=3306,user='wxy',password='123456',db='python_mysql',charset='utf8') # 2.建立游标 cur = conn.cursor(pymysql.cursors.DictCursor)#设置返回结果为list,list的中的元素为字典格式,conn.cursor()不设置返回结果格式的话,默认返回的是二维数组 # 3.执行sql--插入 sql = "insert into app_student ( `name`, `sex`, `age`, `addr`, `grade`, `phone`, `gold`) values ( 'wangxiaoyu', '女', '18', '北京', '摩羯座', '那啥啥', '100');" cur.execute(sql) # 4.手动提交 conn.commit(); # 5.关闭游标 cur.close() # 6.关闭链接 conn.close() # 测试结果: # [{'id': 387, 'name': 'wangxiaoyu', 'sex': '女', 'age': 18, 'addr': '北京', 'grade': '摩羯座', 'phone': '那啥啥', 'gold': 100}]
# ====方法2.自动提交======= # # 1.建立链接,port可以不写,默认是3306(是个默认值参数) conn = pymysql.connect(host='118.26.3.60',port=3306,user='wxy',password='123456',db='python_mysql',charset='utf8',autocommit=True)#autocommit=True执行sql后会自动提交 # 2.建立游标 cur = conn.cursor(pymysql.cursors.DictCursor)#设置返回结果为list,list的中的元素为字典格式,conn.cursor()不设置返回结果格式的话,默认返回的是二维数组 # 3.执行sql--插入 sql = "insert into app_student ( `name`, `sex`, `age`, `addr`, `grade`, `phone`, `gold`) values ( 'wxytest1', '女', '18', '北京', '摩羯座', '那啥啥', '100');" cur.execute(sql) # 4.关闭游标 cur.close() # 5.关闭链接 conn.close()
操作mysql数据库封装函数工具
""" 该函数实现了对mysql数据库的正删改查操作,并返回操作结果 """ import pymysql #操作不同的数据库,导入不同的模块,这里导入操作mysql数据库的模块 def op_mysql(host,username,password,db,sql,port = 3306,many_flag = True):#many_flag true代表返回多条数据,False代表只返回一条数据 conn = pymysql.connect(host = host,port = port,user = username,password = password,db = db,charset = 'utf8',autocommit = True) cur = conn.cursor(pymysql.cursors.DictCursor) cur.execute(sql) if many_flag: result = cur.fetchall() else: result = cur.fetchone() cur.close() conn.close() return result
# 1.查询--返回多条结果 dict = {'host':'118.26.3.60','port':3306,'username':'wxy','password':'123456','db':'python_mysql','sql':'select * from app_student limit 5 '} print(op_mysql(**dict)) 测试结果: [{'id': 108, 'name': 'Mike', 'sex': '男', 'age': 18, 'addr': '北京市昌平区', 'grade': '2th', 'phone': '13761147542', 'gold': 100}, {'id': 109, 'name': 'Michael', 'sex': '男', 'age': 18, 'addr': '北京市昌平区', 'grade': '2th', 'phone': '13761111113', 'gold': 100}, {'id': 110, 'name': '小黑', 'sex': '男', 'age': 18, 'addr': '河南省济源市北海大道32号', 'grade': '天蝎座', 'phone': '18612539000', 'gold': 100}, {'id': 111, 'name': 'xidis', 'sex': '男', 'age': 18, 'addr': '北京市昌平区', 'grade': '天蝎座', 'phone': '18612531000', 'gold': 100}, {'id': 112, 'name': 'xidis', 'sex': '男', 'age': 18, 'addr': '北京市昌平区', 'grade': '天蝎座', 'phone': 'qqqqqqqqqqq', 'gold': 2147483647}]
# 2.查询--返回1条结果 dict = {'host':'118.26.3.60','port':3306,'username':'wxy','password':'123456','db':'python_mysql','sql':'select * from app_student where name="wxytest1"','many_flag':False} print(op_mysql(**dict)) # # 测试结果: # {'id': 388, 'name': 'wxytest1', 'sex': '女', 'age': 18, 'addr': '北京', 'grade': '摩羯座', 'phone': '那啥啥', 'gold': 100}
# 3.修改 dict = {'host':'118.26.3.60','port':3306,'username':'wxy','password':'123456','db':'python_mysql','sql':'update app_student set phone = "就不告诉你" where name = "wxytest1"'} print(op_mysql(**dict)) # 测试结果: # () # 查询后发现已更改: # {'id': 388, 'name': 'wxytest1', 'sex': '女', 'age': 18, 'addr': '北京', 'grade': '摩羯座', 'phone': '就不告诉你', 'gold': 100}
# 4.新增 `name`, `sex`, `age`, `addr`, `grade`, `phone`, `gold`) dict = {'host':'118.26.3.60','port':3306,'username':'wxy','password':'123456','db':'python_mysql','sql':'insert into app_student (`name`,`sex`,`age`,`addr`,`grade`,`phone`,`gold`) VALUES ("wxytest668899","女",18,"北京","摩羯座","保密",100)'} print(op_mysql(**dict)) # 测试结果: # () # 通过查询语句查看: # [{'id': 400, 'name': 'wxytest668899', 'sex': '女', 'age': 18, 'addr': '北京', 'grade': '摩羯座', 'phone': '保密', 'gold': 100}]
# 5.删除 dict = {'host':'118.26.3.60','port':3306,'username':'wxy','password':'123456','db':'python_mysql','sql':'delete from app_student where name = "wxytest668899"'} print(op_mysql(**dict)) # 测试结果: # () # 通过查询语句查看: # ()
4.读写excel
操作excel
import xlrd book = xlrd.open_workbook('名单.xlsx') # sheet = book.sheet_by_index(0)#通过索引方式获取sheet sheet = book.sheet_by_name('人员名单') row = sheet.row_values(0)#获取指定行的数据 list col = sheet.col_values(0)#获取指定列的数据 list value = sheet.cell(0,0).value #获取指定单元格内容 print(row) print(col) print(value) 测试结果: ['姓名', '性别', '年龄', '电话', '地址'] ['姓名', 'wangxiaoyu', 'lixiaokai', 'lijunhao', 'lixinran', 'liheping', 'lisan'] 姓名
print(sheet.nrows)#获取当前sheet中一共有多少行 print(sheet.ncols)#获取当前sheet中一共有多少列 测试结果: 7 5
5.循环写入excel
import xlwt book = xlwt.Workbook()#1.创建excel sheet = book.add_sheet('人员名单')#2.创建一个sheet表单 title = ['姓名', '性别', '年龄', '电话', '地址'] userinfo = [['wangxiaoyu','女',18,'保密哦1','太长了就不说啦1'],['lixiaokai','男',19,'保密哦2','太长了就不说啦2'],['lijunhao','男',5,'保密哦3','太长了就不说啦3']] # 写title for rn,row in enumerate(title): sheet.write(0,rn,row)#3.写入内容 # 写单元格 for rn,rows in enumerate(userinfo,1): for cn,col in enumerate(rows): sheet.write(rn,cn,col) book.save('student_info.xls')#4.保存excel 测试结果: student_info.xls
6.修改excel
import xlrd from xlutils import copy #1.获取excel book = xlrd.open_workbook('student_info.xls') #2.复制一个新的excel new_book = copy.copy(book) # 3.创建一个sheet sheet = new_book.get_sheet(0) addr = ['北京1','北京2','北京3'] for cn,col in enumerate(addr,1): #4.修改 sheet.write(cn,4,col) #5.保存 new_book.save('student_info.xls') 测试结果:
student_info.xls
7.写入日志
import nnlog import time while True: # level:输出设么级别的日志 backCount:最多保留几个日志文件 when:按什么时间单位产生一个新文件 interval:间隔多长时间执行一次删除文件操作 log = nnlog.Logger('test.log',level='debug',backCount=3,when='S',interval=3) log.debug('这个是调试信息') log.info('这个是标准信息') log.warning('这个是告警信息') log.error('这个是错误信息') time.sleep(1)
测试结果:
test.log.2019-06-28_09-17-33
test.log.2019-06-28_09-17-34
test.log.2019-06-28_09-17-35
8.发送邮件
import yagmail#原模块有发送邮件中文会乱码的问题,使用的时候用修改后的包 username = '[email protected]'#发送人邮箱 password = 'hyf123'#授权码,注意不是邮箱密码 smtp = 'smtp.163.com'#SMTP服务器 #1. mail = yagmail.SMTP(user = username,password=password,host=smtp) to = ['123567@qq.com','356789@qq.com']#发送送人 cc = ['[email protected]']#抄送人 subject = 'say love me !'#邮件标题 contents = '大声告诉自己的男/女朋友,让他/她对你说,他爱你!'#邮件内容 #邮件附件 attachments = [r'/Users/wangxiaoyu/PycharmProjects/python_automated_development/week5/app_student.xls',r'/Users/wangxiaoyu/PycharmProjects/python_automated_development/week5/student.xls'] #2.执行发送 mail.send
9.MD5加密
import hashlib password = '123456' m = hashlib.md5(password.encode())#md5加密 ,md5加密是不可逆的,但常见的字符串可以通过撞库所得 print(m.hexdigest()) 测试结果: e10adc3949ba59abbe56e057f20f883e
# 加盐加密 salt = '@#¥%……'#盐 password = '123456' content = (password + salt)#密码加盐后的字符串 m = hashlib.md5(content.encode())#md5加盐加密 print(m.hexdigest()) 测试结果: 6d0759469c8656aba427f3e77d156f75
#md5加密函数 def str_to_md5(content,salt='#$%^&*('): content = str(content) + salt m = hashlib.md5(content.encode()) return m.hexdigest() print(str_to_md5('123456')) 测试结果: 7ce5039bcc0dfc23b50c601f1d89cef0
import hashlib password = '123456' m = hashlib.sha256(password.encode())#sha256加密 print(m.hexdigest()) 测试结果: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
# 加密函数 def str_to_sha256(content): content = str(content) m = hashlib.sha256(content.encode()) return m.hexdigest() with open('加密模块.py',encoding='utf-8') as fr: content = fr.read() print(str_to_sha256(content)) 测试结果: 829efc0268ba73642151909d2ea7ecb7b8bf2a4faadcd58a0fde78a76f3a136c