python之:map、filter、random、datatime,写日志,发邮件,操作mysql、redis,MD5加密,写excel

1.map、filter

这两个方法都是帮你调用函数的

dir_names=['android','ios','tomcat','java','python','php','nginx']

res=map(makdir,dir_names)  第一个参数是方法名,第二个参数是可循环的值,作用是将可循环值中的每一个元素依次循环传入到方法执行

print(res)  此时不会打印出结果,因为map调用生成的结果放到生成器中,只有在使用时,才会生成数据放到内存,想要打印出来就把res转换成list,即list(res)

all=[i for i in range(5)] #结果放到list,占内存,空间换时间(一次得到数据放到内存)

all=(i for i in range(5)) #结果放到生成器,节省空间,增加了cpu的工作量(每次都要计算一下得到数据),rang()的实现也是一个生成器

def my(num):
if num%2==0:
return True
res=list(filter(my,range(10))) #返回列表中为真的数据,即range(10)中的数据
#只保留返回真的数据
res2=list(map(my,range(10)))
# 不管返回啥,都拿到
filter()  过滤,他把函数处理结果为假的数据给过滤掉了,生成结果也是放到生成器
2.写日志
import nnlog
my_log=nnlog.Logger('rizhi.log',level='debug',when='s',backCount=5) #when按什么时间单位生成日志,backcount最多保存几个日志,多余的删除掉。level日志的级别,可不写该参数,默认为bebug
my_log.debug('debug')  调试信息
my_log.info('info') 正常输出
my_log.warning('warning') 警告
my_log.error('error') 出错
debug、info、warning、error日志级别依次升高
3.发送邮件
import yagmail
# 账号 密码(只能用邮箱授权码) 邮件服务器(一般都用stmp协议) 收件人 抄送(非必填) 主题 正文 附件(非必填)
uesername='********@vip.qq.com'
passwd='zqdlhfeqdnbnbbbe'#授权码,不是邮箱密码
mail=yagmail.SMTP(user=uesername,password=passwd,host='smtp.qq.com',smtp_ssl=True)
# 安全协议,smtp_ssl=True如果是qq邮箱需要加这个参数,其他不需要
mail.send(to='*********@qq.com',cc='********@163.com',subject='qwer',contents='sdf',attachments=r'C:\Users\Administrator\Desktop\笔记.txt')
# to 收件人 cc 抄送人 subject 主题 contents 内容 attachments 附件内容 多个时都是用列表的形式写出
# 如果你发送的附件名,中文时乱码的话
# pip uninstall yagmail,卸载掉,换个新的装一下
4.操作mysql
# 1.连接数据库:需要 ip 账号 密码 端口号 数据库名称
# 2.执行sql
# 3.获取到结果
import pymysql
conn=pymysql.connect(host='***.***.***.***',user='***',password='123456',port=3306,db='***',charset='utf8',autocommit=True)#连接数据库,加上autocommit=True 可以直接对数据库进行修改,其中port是int类型,注意不要加引号
cur=conn.cursor()#建立游标,类似于仓库管理员
sql="insert into nhy(name,pwd) VALUE ('jc','123456')"
cur.execute(sql)
conn.commit() #对数据库修改操作时,需要进行commit
cur.execute("select * from nhy where name='jc'")
# cur.execute('select * from nhy;') #执行sql语句,只是帮你执行sql语句,不会帮你返回结果
print(cur.fetchall()) #获取所有结果,结果存放到二维元组当中
# print(cur.fetchone()) #只获取一条数据
# print(cur.fetchmany(2))#指定获取几条
# 前边结果被获取过了,后边结果就不能再被获取了
cur.close() #游标关闭
conn.close() #连接关闭

以下为操作mysql数据库的封装函数,可以直接拿来用
def my_db(ip,user,passwd,db,sql,port=3306,charset='utf8'):
coon=pymysql.connect(host=ip,user=user,password=passwd,db=db,port=port,charset=charset,autocommit=True)
cur=coon.cursor()
sql=sql.strip()
cur.execute(sql)
sql_start=sql[:6].lower() #取sql的开头,然后转化成小写的
if sql_start.startswith('select') or sql_start.startswith('show'):
data=cur.fetchall()
else:
data='ok'
cur.close()
coon.close()
return data

5.操作redis
#传统的关系型数据库
# mysql oracle sql server sqllie db2
# id name passwd cratetime stu
# score
#数据存在磁盘上
# 使用sql语句来操作数据
# 表与表之间有关系
#非关系型数据库 nosql
# {'name':'xxx',''}
# mongodb 数据存在磁盘上的
# redis 数据都是存在内存里面

import redis
#连接redis
r = redis.Redis(host='***.***.***.***',port=6379,password='****',db=10)
#增删改查
#操作string类型
# r.set('nhy_info','age 18 sex nan sdfsdfsdfsd') #增加、修改数据,传入第三个参数时,表示key的失效时间,不设置或者为-1时,代表永久生效
# res = r.get('nhy_info') #获取数据,得到bytes类型的数据,key不存在的话,不报错,返回none
# bytes#二进制
# r.delete('nhy_info') #指定一个key删除他,key不存在的话,不报错
# print( res.decode() ) #编码,bytes就变成了字符串
# print(r.keys('*info')) #获取到所有的key
# print(r.exists('dashu_name')) #判断这个key是否存在
# r.flushdb()#可以清空当前数据库里面所有的key
# r.expire('session_crm',600)#指定key的失效时间
# print(r.ttl('session_crm'))#用来这个key的失效时间
# print(r.type('session_crm'))#看key的类型
#hash 哈希类的key

#哈希类型你理解为一个字典嵌套字典
# redis的命令行里面select 8 就是切换数据库
# 操作hash类型的
#增删改查
r.hset('fdfds','sasa','trtrsasae')
r.hset('fdfds','cxcx','hghghg')
r.hset('fdfds','fdfdf','trtre')
# 修改也是hset
# r.hdel('fdfds','sasa') #删除指定的小key
# r.delete('fdfds') #直接删除大key
# print(r.hget('fdfds','cxcx'))#获取指定小key里面的数据
res = r.hgetall('fdfds')#获取到hash类型里面所有的数据,存在字典里,但k和v都是bytes类型的,需要转换为字符串类型,这里就需要用.decode()方法
a = {}
for k,v in res.items():
a[k.decode()] = v.decode()
print(a)

6.MD5加密
import hashlib
s='123456'
m=hashlib.md5(s.encode()) #必须传一个btyes类型的,后边加.encode()
print(m.hexdigest()) #获取到加密之后的结果
#MD5不可逆,不可解密
# 所有一样的字符串,MD5加密之后的结果都是一样的
# 撞库来实现MD5解密的

7.写excel
import xlwt
book=xlwt.Workbook() #创建excel
sheet=book.add_sheet('1') #加一个sheet页
sheet.write(0,0,'学生编号') #行,列
book.save('ss.xls') #一定要以xls结尾
 
 
 

猜你喜欢

转载自www.cnblogs.com/kuhaha/p/9297366.html
今日推荐