22.模块
二.今日内容大纲
1.collections
2.queue队列
3.time
4.random
5.os,sys
序列化模块和模块的调用
# 模块就是我们把装有特定功能的代码进行归类的结果,从代码编写来看我们的程序,顺序为 # 一条代码 < 语句块 < 代码块(函数,类) < 模块 py 文件就是模块 # 引入模块的方式: # 1.import 模块 # 2.from xxx import 模块
collections模块
1.collections模块
collections 模块主要封装了一些关于集合类的相关的操作,比如Iterable,Iteractor
还有一些基本数据类型以外的数据集合类型 Counter,deque,orderDict,namedtuple
counter
计算字符串中每个字符出现的次数 s = 'sdhfsfhdsfheweiuriwelwefwicjwe' dic = {} for i in s: dic[i] = dic.get(i,0) + 1 print(dic) #传统的算法统计方式 from collections import Counter #引入模块,计数器 c = Counter(s) print(c)#获取到的结果可以像字典一样进行使用[key] print(c['w'])#统计单个字符 lst = ['提莫','鳄鱼','蛮王','盖伦','鳄鱼'] c = Counter(lst) print(c)
队列和栈
#2.deque 双向队列 # 重点 #需要先了解两种数据结构,1.栈,2,队列 # 1.栈 先进后出 First in Lst Out FILO #2.队列 先进先出 First in First Out FIFO 重点 # #队列 在python 中提供了queue模块 ,使用起来非常方便 # import queue # q = queue.Queue() #创建队列 # q.put('盖伦') #放入元素 # q.put('亚索') # q.put('剑圣') # q.put('杰斯') # # print(q.get()) #获取元素 # print(q.get()) # print(q.get()) # print(q.get()) # print(q.get()) #当没有元素的时候,阻塞了,在等下一个元素 # from collections import deque # q = deque() # q.append('盖伦') #右侧添加 # q.append('诺克') # q.appendleft('蛮王') #左侧添加 # q.append('锤石') # # print(q) # # print(q.pop()) #右侧删除 # print(q.popleft()) #左侧删除
由于Python中没有给出栈的模块,需要自己写
由于python没有给出stack模块,需要手写一个栈的粗略版本 类似于一个装馒头的桶 要写栈 重要的两步,1.入栈 2.出栈 属性 1.列表(容器) 2.大小 size 3.栈顶指针 class StackFullError(Exception): pass class StackEmptyError(Exception): pass class Stack: def __init__(self,size): self.index = 0 #栈顶指针 self.size = size self.lst = [] #容器 def push(self,el): if self.index < self.size: #还没有装满 self.lst.insert(self.index,el) self.index += 1 else: #装满了 raise StackFullError('列表满了,装不下了') def pop(self): if self.index > 0: self.index -= 1 return self.lst[self.index] else: raise StackEmptyError('都取完了,还取个捶捶') #使用 实例化栈 s = Stack(10) s.push("馒头1") s.push("馒头2") s.push("馒头3") s.push("馒头4") s.push("馒头5") s.push("馒头6") s.push("馒头7") s.push("馒头8") s.push("馒头9") s.push("馒头10") print(s.pop()) print(s.pop()) print(s.pop()) print(s.pop()) print(s.pop()) print(s.pop()) print(s.pop()) print(s.pop())
namedtuple 命名元祖
命名元祖,顾名思义,给元组内的元素进行命名,比如我们说(x,y)是一个 元组,我们还可以认为这是一个点坐标,这时我们就可以使用namedtuple对元素进行命名 from collections import namedtuple #自己定义元组 po = namedtuple('point',['x','y']) #定义了简单的类 p = po(1,2) #命名元祖 print(p) class Point: def __init__(self,x,y): self.x = x self.y = y p =Point(1,2) print(p)
orderedDict 和 defaultdict
orderdict 顾名思义,字典的key默认是无序的,而Orderdict是有序的 d = {"a":1,"b":2,"c":3} print(d) from collections import OrderedDict od = OrderedDict({"a":1,"b":2,"c":3}) print(od.get('b')) print(od['b']) defaultdict:可以给字典设置默认值,当key不存在时,直接获取默认值: from collections import defaultdict d = defaultdict(list) d['盖伦'] = '德玛' print(d['亚索']) #当key不存在的时候,会自动执行构造方法中传递的内容 print(d['盖伦'])
时间模块(重点)
包括系统时间和格式化时间的两种相互转换 非常重要 必须记住
'time 重点 时间模块是我们需要熟记的,后面写程序经常能遇到,比如计算时间差,按照 客户要求展示时间 import time print(time.time()) #1539870395.3688216 系统时间,计算机识别的 这样得到的是系统时间,需要对时间进行格式化,引出另一种时间的格式 python中有三种表现形式 1.时间戳(timestamp) 时间戳使用的是从从1970年年01⽉月01⽇日 00点00分00秒到现在 一共经过了了多少秒... 使⽤用float来表⽰示 2.格式化时间(strftime)这个时间可以根据我们的需要对时间进行任意形式 的格式化 3.结构化时间(struct_time) 这个时间主要可以把时间进行分类划分, 比如.1970年01月01日00点00分00秒这个时间可以被细分为年, 月, 日.. ...一大堆东西. 时间戳就是time.time(),这样的时间是不方便使用的
import time print(time.time()) s = time.strftime('%Y/%m/%d %H:%M:%S') print(s) 打印当前时间
日期格式化的标准
# 日期格式化的标准 '''%y 两位数的年份表示(00-99) %Y 四位数的年份表示(0000-9999) %m 月份(01-12) %d 月分内的一天(01-31) %H 24小时制小时数(0-23) %I 十二小时制小时数 (0-12) %M 分钟数(00-59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的⽉月份名称 %B 本地完整的⽉月份名称 %c 本地相应的⽇日期表示和时间表示 %j 年年内的⼀一天(001-366) %p 本地A.M.或P.M.的等价符 %U ⼀一年年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W ⼀一年年中的星期数(00-53)星期⼀一为星期的开始 %x 本地相应的⽇日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身 '''
时间戳与结构化时间的相互转换
print(time.localtime()) #用来计算的 import time f =12982948394 st = time.localtime() #将时间戳转化成结构化时间 print(st) #格式化时间 t = time.strftime('%Y/%m/%d %H:%M:%S',st) print(t) 用户输入了一个时间,2018-09-08 11:22:36 存储成时间戳 先把格式化时间转换成结构化时间 import time s = '2018-09-08 11:22:36' st = time.strptime(s,'%Y-%m-%d %H:%M:%S') print(st) t = time.mktime(st) print(t)
random模块
# 所有的随机相关的内容都在random模块中 import random # print(random.random()) #随机打印0-1之间的小数 # print(random.uniform(3,10)) #随机打印3-10之间的小数 # # print (random.randint(1,10)) #随机打印1-10之间的整数 # print(random.randrange(1,10,2)) #随机打印1-10之间的奇数 # # print(random.choice(['盖伦','亚索',['蛮王','杰斯']])) #随机选择,也可以是列表中的列表 # # print(random.sample(['1','23',[4,5]],2)) #列表任意两个元素组合 # # # lst = [1,2,3,4,4,55,5,67,5] # random.shuffle(lst) #随机打乱顺序 # print(lst)
os模块
import os # 创建多层目录 # os.makedirs('a/b/c/d') # os.removedirs('a/b/c/d') # 空目录可以删除. 非空的不能删 # os.system('dir') #运行shell命令,直接显示 # ret = os.popen('dir').read() #执行命令返回结果 # print(ret) ''' os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删 除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不不为空则无法删除,报错;相当于shell中 rmdir dirname os.listdir('dirname') 列列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式 打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 os.system("bash command") 运行shell命令,直接显示 os.popen("bash command).read() 运⾏行行shell命令,获取执⾏行行结果 " "os.getcwd() 获取当前⼯工作⽬目录,即当前python脚本⼯工作的⽬目录路路径 " "os.chdir("dirname") 改变当前脚本⼯工作⽬目录;相当于shell下cd # os.path os.path.abspath(path) 返回path规范化的绝对路路径" \ os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。 即os.path.split(path)的第二个元素 os.path.exists(path) 如果path存在,返回True;如果path不不存在,返回False os.path.isabs(path) 如果path是绝对路路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False o s.path.join(path1[, path2[, ...]]) 将多个路路径组合后返回,第一个绝对路路径之前的参数 将被忽略略 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小 # 特殊属性: # os.sep 输# 出操作系统特定的路路径分隔符,win下为"\\",Linux下为"/" # os.linesep 输出当前平台使⽤用的⾏行行终⽌止符,win下为"\r\n",Linux下为"\n" # os.pathsep 输出⽤用于分割⽂文件路路径的字符串串 win下为;,Linux下为: # os.name 输出字符串串指示当前使⽤用平台。win->'nt'; Linux->'posix''''
sys 模块
'''sys.argv 命令行参数,第一个元素是程序本身路径 sys.exit 退出程序,正常退出时exit(0)错误时退出exit(1) sys.version 获取python解释器的版本 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称'''
浙公网安备 33010602011771号