先对上周的说的模块进行一些补充:
import os print(os.path.abspath('.')) # 取绝对路径 print(os.path.abspath('..')) # 取上级路径 print(os.path.abspath('..\\day3')) # print(os.getcwd()) print(os.listdir('C:\\Users\WANG\\PycharmProjects\\untitled')) os.chdir('C:\\Users\WANG\\PycharmProjects\\untitled\\day3') # 更改当前工作目录 print(os.getcwd()) ################################################################################ res1 = os.system('ipconfig') # 用来执行操作系统命令 # 用来执行操作系统命令,但是只能帮你执行,获取不到他的结果 # print('res的结果:',res1) res2 = os.popen('ipconfig').read() # 用来执行操作系统的命令 print('res的结果:',res2)
datetime模块
import datetime print(datetime.date.today()) # 当天的日期,只有日期 print(datetime.datetime.today()) # 当天的时间,有日期有时间 print(datetime.date.today() + datetime.timedelta(days=-10)) # 取十天前的日期,直接输入-10默认对应参数days res = datetime.datetime.today() + datetime.timedelta(hours=-10,minutes=-20,seconds=-15) print(res.date()) # 只取到日期 print(res.time()) # 只取到时间 print(res.timestamp()) # 时间戳 print(res.strftime('%Y-%m %H:%M:%S')) # 取到格式化时间
map、filter模块
# 循环帮你调用函数的 import os import time def makir(dir_name): if not os.path.isdir(dir_name): os.mkdir(dir_name) return True dir_names = ['android','ios','tomcat','java','python','php','nginx'] # res = map(makir,dir_names) # 循环帮你调用函数 # res = list(map(makir,dir_names)) # print(res) # 生成器,节省内存 # 1、是不是循环帮你调用函数了 # 2、有没有把函数的返回值拿到 ################################################################################ def timestampToStr(timestamp=None,format='%Y-%m-%d %H:%M:%S'): if timestamp: time_tuple = time.localtime(timestamp) # 转成时间元组 return time.strftime(format,time_tuple) return time.strftime(format) all_data = (timestampToStr(int(time.time()) - 86400*i) for i in range(10)) # print(all_data) # for a in all_data: # print(a) # res = [''] # list,用空间换时间 # all_data # 节省空间,增加了cpu的计算时间 nums1 = [str(i).zfill(2) for i in range(10)] # list nums2 = (str(i).zfill(2) for i in range(10)) # 生成器 # print(nums2) ################################################################################ def my(num): if num%2==0: return True # filter 和 map 的区别 res1 = list(filter(my,range(10))) # 过滤,它把函数处理结果为假的数据给过滤掉了 # 只保留函数返回真的数据 res2 = list(map(my,range(10))) # 不管你返回啥,我都给你拿到 print('res1:',res1,'\nres2:',res2)
random模块
import random print(random.random()) # 取小于1的随机的小数 print(random.randint(1,10)) # 指定范围,取随机的整数 s = 'abcdef' print(random.choice(s)) # 随机选择一个,只能选一个 print(random.sample(s,3)) #随机选择N个,返回的是一个list print(random.uniform(1,10)) # 指定一个范围,随机取一个小数
下面讲一些可能会常用到的一些模块:
例如数据库首先先来说一说
数据库:
# 传统的关系型数据库 # mysql oracle sql server sqllie db2 # id name passwd cratetime sut # score # 数据存在磁盘上 # 使用sql语句来操作数据 # 表与表之间有关系 # 非关系型数据库 nosql # {'name':'xxx',''} # mongodb 数据存在磁盘上的 # redis 数据都是存在内存里面
先来讲一下mysql数据库:
# 1、连上数据库 IP 账号密码 端口号 数据库 # 2、执行sql # 3、获取到结果 import pymysql # 连上数据库 coon = pymysql.connect(host='XXX.XXX.XXX.XXX', user='XXX', password='123456', port=3306, db='XXX', charset='utf8', autocommit=True) # autocommit 自动提交 cur = coon.cursor() # 建立游标 ################################################################################ sql1 = 'select * from nhy where name = "wangjian";' cur.execute(sql1) # 执行sql语句,它只是帮你执行sql语句,不会给你返回数据 print(cur.fetchall()) # 获取结果 print(cur.fetchone()) # 获取一条结果 print(cur.fetchmany(3)) # 指定获取几条 ################################################################################ sql2 ='insert into nhy (name,pwd) value ("wangjian","1234567");' cur.execute(sql2) coon.commit() # 提交 cur.execute(sql1) print(cur.fetchall()) cur.close() # 游标关闭 coon.close() # 连接关闭
说完mysql库,再来说一说redis
import redis # 连接redis r = redis.Redis(host='XXX.XXX.XXX.XXX',port=6379,password='XXX',db=XXX) # 增删改查 ##################################### 增加&修改数据 ########################################### r.set('wj_info','age 18 sex man abcdefghi',50) # 增加数据 (Key,value,存在有效时长(秒)) # 获取数据 res = r.get('wj_info') print(res) # b'age 18 sex man abcdefghi' # b代表bytes类型 # 二进制 print(res.decode()) # 编码 ###################################### 删除数据 ########################################## r.delete('wj_info') # 删除指定的key r.flushdb() # 清空当前数据库里面所有的key ###################################### 查询数据 ########################################## print(r.keys()) # 获取到所有的key print(r.keys('*info')) # 以info结尾的key,支持模糊匹配 r.exists('wj_info') # 判断这个key是否存在,返回True、False #★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ # hash 哈希类型的key # 哈希类型你理解为一个字典嵌套一个字典 # select 10 redis 命令行里面select 8 就是切换至db8数据库 # 增删改查 ##################################### 增加&修改数据 ########################################### r.hset('sessions_wj','ABC1','123456789abcdefgh') r.hset('sessions_wj','ABC2','123456789abcdefgh') r.hset('sessions_wj','ABC3','123456789abcdefgh') ##################################### 删除数据 ########################################### r.hdel('sessions_wj','ABC2') # 删除指定的小key r.delete('sessions_wj') # 直接删除大key ##################################### 查询数据 ########################################### print(r.hget('sessions_wj','ABC3')) # 获取指定小key里的数据 print(r.hgetall('sessions_wj')) # 获取到hash类型里面所有的的数据 r.expire('sessions_wj',600) # 指定失效时间 print(r.ttl('sessions_wj')) # 用来看key的失效时间 print(r.type('sessions_wj')) # 用来看key的类型 知道了如何获取结果,那么我们再说一下 # 把 {b'kate': b'lq'} 转换成 {'kate': 'lq'} # res = r.hgetall('sessions_wj') # print(res) # a = {} # for k,v in res.items(): # a[k.decode()] = v.decode() # print(a) ##################################### 另一种方法 ########################################### # for k,v in res.items(): # res[k.decode()] = res.pop(k).decode() # 能节省内存,因为它把原来的key删掉了 # # 把原来的bytes类型的key删掉,这样子的话,res里面就没有多余的bytes类型的数据了 # print(res)
说完了数据库,那么我们顺便了解一下如何对数据进行加密————这里介绍一下MD5加密
# md5不可逆 # 所有一样的字符串,md5之后的结果都是一样的 这里直接将md5加密封装成一个简单的函数: # md5加密封装函数 def myMd5(s): s = str(s) m = hashlib.md5(s.encode()) # 必须得传一个bytes类型的 print(m.hexdigest()) # 获取到加密后的结果 return m.hexdigest()
查询完数据库后,如何把数据导出来呢?接下来介绍一下如何操作excel~
import xlwt book = xlwt.Workbook() # 创建excel sheet = book.add_sheet('stu_info') # 加一个sheet sheet.write(0,0,'学生编号') # 行,列 sheet.write(0,1,'学生姓名') # 行,列 sheet.write(0,2,'成绩') # 行,列 sheet.write(1,0,'1') sheet.write(1,1,'小黑') sheet.write(1,2,'88.5') book.save('stu.xls') # 一定要用xls的
写完excel那么如何写日志呢?
import nnlog my_log = nnlog.Logger('a.log',when='S',backCount=5) # when参数表示可以写D-天,S-秒..为单位;backCount参数表示最多保存几个日志文件 # debug、info、warning、error # my_log.debug('这是debug级别') # my_log.info('info级别的') # my_log.warning('warning级别的') # my_log.error('error级别的') nnlog.Logger.words = '哈哈哈哈哈'
那么如何把这个excel文件以邮件方式发给别人呢?
import yagmail # 账号 密码 邮箱服务器 收件人 抄送 主题 正文 附件 username = 'XXXXXXXXXX@163.com' passwd = 'XXXXXXXXXXXXX' mail = yagmail.SMTP(user=username,password=passwd,host='smtp.163.com') # 安全协议,smtp_ssl=Ture 如果是qq邮箱,需要加这个参数 # 连接上邮箱了 mail.send(to = ['XXXXXXXXXXXXX@163.com'], cc = ['XXXXXXXXXXX@qq.com'], subject='哈哈哈哈哈哈哈哈哈',# 邮件主题 contents='哈哈哈哈哈哈哈哈哈',# 邮件内容 attachments=r'C:\Users\WANG\Desktop\stu.xls' # 邮件附件 )
浙公网安备 33010602011771号