06Python 内置函数redisyagmailnnlog导入模块的实质
Posted momolei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了06Python 内置函数redisyagmailnnlog导入模块的实质相关的知识,希望对你有一定的参考价值。
1 内置函数
1.1 map()和filter()
1 def bl(i): 2 return str(i).zfill(2) 3 l=‘12333‘ 4 # map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。 5 print(type(map(bl,l))) 6 res = list(map(bl,l)) #,结果放到了一个生成器中,需要强制转换成list、set 7 print(res)
#运行结果 <class ‘map‘> [‘01‘, ‘02‘, ‘03‘, ‘03‘, ‘03‘]
1 def bl(i): 2 if i>‘3‘: 3 return True 4 l=‘12345‘ 5 #该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False, 6 #最后将返回 True 的输入元素放到新列表中。 7 res = list(filter(bl,l))#Python3.x 返回迭代器对象 8 print(res)
#运行结果 [‘4‘, ‘5‘]
1.2 enumerate()
enumerate(sequence, [start=0])
- sequence -- 一个序列、迭代器或其他支持迭代对象。
- start -- 下标起始位置。
1 >>> lst = [1,2,3,4] 2 >>> for index,value in enumerate(lst): 3 ... print(index, value) 4 ... 5 0 1 6 1 2 7 2 3 8 3 4
例:
1 import xlwt 2 book = xlwt.Workbook() 3 sheet = book.add_sheet(‘sheet1‘) 4 all_data = [ 5 [‘id‘,‘name‘,‘sex‘,‘phone‘,‘country‘], 6 [‘1‘,‘xiaoming‘,‘男‘,123423432,‘china‘], 7 [‘2‘,‘xiaoming‘,‘男‘,123423432,‘china‘], 8 [‘3‘,‘xiaoming‘,‘男‘,123423432,‘china‘], 9 [‘4‘,‘xiaoming‘,‘男‘,123423432,‘china‘], 10 [‘5‘,‘xiaoming‘,‘男‘,123423432,‘china‘], 11 [‘6‘,‘xiaoming‘,‘男‘,123423432,‘china‘], 12 ] 13 # enumerate参数为可遍历/可迭代的对象(如列表、字符串) 14 # enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用 15 for i, data in enumerate(all_data): 16 for j, d in enumerate(data): 17 sheet.write(i,j,d) 18 book.save(‘stu.xls‘)
1.3 其他内置函数
1 input()#输入 2 type()#返回值类型 3 len()#返回对象(字符、列表、元组等)长度或项目个数 4 print()#打印 5 list()#类型转换 6 dict()#类型转换 7 tuple()#类型转换 8 set()#类型转换 9 str()#类型转换 10 int()#类型转换 11 float()#类型转换 12 bool()#非空即真,非零即真
1 print(max([1,2,3,4,7,8,9]))#最大值 2 print(min(1,2,3,4,7,8,9))#最小值 3 print(round(3.1323432,2)) #取几位小数 4 # sort 与 sorted 区别: 5 # sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。 6 # list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。 7 sorted([5,6,7,343])#返回重新排序的列表,默认为升序 8 s=‘1223423423‘ 9 print(sorted(s,reverse=True))#返回重新排序的列表,reverse = True 降序 10 print(ord(‘a‘))#字母转成ascii码表里面的值 11 print(chr(97))#把数字转成ascii码表里面的字母 12 res1 = any([1,1,0]) #如果这个list里面有一个为真,就返回true 13 res2 = all([1,1,1,1,1]) #如果这个list里面全部为真,就返回true 14 print(res1,res2)
运行结果:
9 1 3.13 [‘4‘, ‘4‘, ‘3‘, ‘3‘, ‘3‘, ‘2‘, ‘2‘, ‘2‘, ‘2‘, ‘1‘] 97 a True True
1 import hashlib 2 print(dir(hashlib))#返回当前范围内的变量、方法和定义的类型列表 3 m = hashlib.md5(‘abcd‘.encode()) 4 print(dir(m))#返回当前范围内的变量、方法和定义的类型列表 5 print(m.hexdigest()) 6 f = open(‘a.txt‘).read() 7 print(type(f)) 8 res = eval(f) #执行简单的python代码,执行的是python表达式 9 print(res) 10 print(type(res)) 11 my_code= ‘‘‘ 12 def my(): 13 print(‘运行my,xioaojun‘) 14 my() 15 ‘‘‘ 16 exec(my_code) #执行一段python代码
运行结果:
[‘__all__‘, ‘__builtin_constructor_cache‘, ‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘, ‘__get_builtin_constructor‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘_hashlib‘, ‘algorithms_available‘, ‘algorithms_guaranteed‘, ‘blake2b‘, ‘blake2s‘, ‘md5‘, ‘new‘, ‘pbkdf2_hmac‘, ‘sha1‘, ‘sha224‘, ‘sha256‘, ‘sha384‘, ‘sha3_224‘, ‘sha3_256‘, ‘sha3_384‘, ‘sha3_512‘, ‘sha512‘, ‘shake_128‘, ‘shake_256‘] [‘__class__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘block_size‘, ‘copy‘, ‘digest‘, ‘digest_size‘, ‘hexdigest‘, ‘name‘, ‘update‘] e2fc714c4727ee9395f324cd2e7f331f <class ‘str‘> {‘username‘: ‘abc‘, ‘password‘: 12345} <class ‘dict‘> 运行my,xioaojun
2 redis模块
redis模块为第三方模块,需要安装:pip3 install redis
- 关系型数据库:数据存在磁盘上,使用sql语句来操作数据,表与表之间有关系
- 非关系型数据库:{‘key‘:‘value‘} 键对
mongodb:数据存在磁盘上
redis:数据存在内存上
2.1 连接redis
1 import redis 2 3 ip = ‘1*.*.*.*0‘ 4 password=‘HK139bc&*‘ 5 6 r = redis.Redis(host=ip,password=password,port=6379,db=1, 7 decode_responses=True) 8 # decode_responses这个参数的意思是,返回的二进制数据直接decode一下,即将bytes类型改为默认utf-8,不加这个查询返回的是二进制类型,比如b‘12345‘
2.2 string类型
1 #所存数据类型为string,一个key,一个value 2 # 查 3 res = r.get(‘nhy2‘) 4 r.get(‘python:lyos‘) 5 6 #增、改 7 r.set(‘nhy‘,‘acb123‘,60) #新增和修改都是它,60秒失效 8 r.set(‘python:os‘,‘listdir,path‘)#文件夹python下的键os,冒号前是文件夹 9 10 #删 11 r.delete(‘nhy‘) #删除指定的key 12 r.flushdb()#清空数据库里的所有key
1 print(r.keys())#获取到所有的key 2 print(r.keys(‘niu*‘))#查出所有以niu开头的key 3 print(r.get(‘lynn‘))#get一个不存在的key,返回none 4 5 r.set(‘双子座zy:zy:01‘,‘多层文件夹‘) 6 7 for k in r.keys:#循环遍历所有的key,然后删除 8 r.delete(k)
#运行结果 [‘python:os‘, ‘双子座zy:zy:01‘] [‘python:os‘] None
2.3 hash类型
哈希类型类似于下面这些二层字典
session = {
"nhy":{‘sex‘:18,‘age‘:18},
"nhy2":{‘sex‘:18,‘age‘:18},
}
token = {
"nhy2":{‘x‘:‘x‘}
}
1 r.hset(‘jnz_stus‘,‘yangfan‘,‘sdfsdfsdfsdf‘)#外面的key, 里面的key,值 2 res = r.hget(‘jnz_stus‘,‘yangfan‘) #指定获取里面小key的值 3 print(res) 4 5 res = r.hgetall(‘jnz_stus‘) #获取到大key里面所有的数据 6 print(res) 7 8 r.delete(‘jnz_stus‘) #删除大key 9 r.hdel(‘jnz_stus‘,‘cm‘) #删除指定的小key
#执行结果 sdfsdfsdfsdf {‘yangfan‘: ‘sdfsdfsdfsdf‘, ‘cm‘: ‘hahahah‘}
2.4 数据失效
1 r.expire(‘aaa‘,100)#设置key失效时间,不管是string还是hash都可使用 2 print(r.ttl(‘jd‘))#获取key还有多久失效
2.5 decode_responses参数
1 import redis 2 ip = ‘*.*.*.*0‘ 3 password=‘HK139bc&*‘ 4 r = redis.Redis(host=ip,password=password,port=6379,db=1,) 5 #未加decode_responses参数 6 7 res = r.hgetall(‘jnz_stus‘) #获取到大key里面所有的数据 8 # 1、先循环res 9 # 2、k和v decode一下 然后放到new这个字典里面 10 new = {} 11 for k,v in res.items(): 12 print(k,v) 13 new [k.decode()] = v.decode() 14 print(‘======下面是转完之后的‘) 15 print(new)
#decode_responses未设置时运行结果 b‘yangfan‘ b‘sdfsdfsdfsdf‘ b‘cm‘ b‘hahahah‘ ======下面是转完之后的 {‘yangfan‘: ‘sdfsdfsdfsdf‘, ‘cm‘: ‘hahahah‘}
3 yagmail模块
1 import yagmail 2 3 user=‘u***[email protected]‘ 4 password=‘h***3‘#163、qq邮箱为授权码,一般公司邮箱是登录密码 5 6 m = yagmail.SMTP(host=‘smtp.163.com‘,user=user, 7 password=password, 8 ) 9 # port=465, #可以不写port,默认465 10 #smtp_ssl=True 如果是qq邮箱的话加这个参数 11 #如果是单个收件人,直接写string即可,如果是多个写成list 12 m.send(to=‘5*****[email protected]‘, 13 cc=[‘1*****[email protected]‘,‘1*****[email protected]‘], 14 subject=‘明天不上课‘,contents=‘明天不上课,在家好好休息。。。‘, 15 attachments=[‘笔记.txt‘,r‘C:Userszhanglei06DocumentsTencent Files365006014FileRecvday7内置函数.py‘]) 16 #附件,多个用逗号隔开,放在list里
默认的yagmail可能会造成附件的中文名乱码
4 nnlog模块
nnlog事对logging写日志操作进行了封装,使用起来更方便。该模块是第三方模块,需要先安装并导入
1 #日志级别如下: 2 # error 3 # waring 4 # info 5 # debug 6 import nnlog 7 log = nnlog.Logger(‘my.log‘,level=‘info‘,backCount=5,when=‘D‘) 8 # file_name是日志文件名 9 # level是日志级别,如果不传的话默认是debug级别 10 # when是日志文件多久生成一个,默认是按天,S 秒、M 分、 H 小时、 D 天、 W 每星期 11 # backCount是备份几个日志文件,默认保留5天的 12 # interval是间隔多久生成一个日志文件,默认是1天 13 log.info(‘xiaojun登陆...‘) 14 log.error(‘数据连接失败!‘) 15 log.surprise()
5 导入模块
- 导入模块的顺序
1、先从当前目录下找这个模块
2、再去环境变量里面找
1 import sys 2 print(sys.path) #查看环境变量
#查看结果 [‘D:\\Program Files\\PyCharm Community Edition 2016.1.2\\helpers\\pydev‘, ‘D:\\Program Files\\PyCharm Community Edition 2016.1.2\\helpers\\pydev‘, ‘C:\\Users\\tyourai\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip‘, ‘C:\\Users\\tyourai\\AppData\\Local\\Programs\\Python\\Python36\\DLLs‘, ‘C:\\Users\\tyourai\\AppData\\Local\\Programs\\Python\\Python36\\lib‘, ‘C:\\Users\\tyourai\\AppData\\Local\\Programs\\Python\\Python36‘, ‘C:\\Users\\tyourai\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages‘, ‘C:\\Users\\tyourai\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\pymysql-0.9.2-py3.6.egg‘, ‘E:\\PycharmProjects\\test‘]
pycharm可以将目录设置到环境变量里
- 导入的模块的实质
就是把导入的这个python文件运行一次
以上是关于06Python 内置函数redisyagmailnnlog导入模块的实质的主要内容,如果未能解决你的问题,请参考以下文章