python--(常用模块-1)
一.模块的简单认识:
什么是模块,模块就是我们把装有特有功能的代码进行归类的结果,从代码编写的单位来看我们的程序,从小到大的顺序:一条代码<语句块<代码块(函数,类)<模块.我们目前写的所有的py文件都是模块.
引入模块的方式:
1,import模块
2,forom xxx import模块
二.collections模块
1,Counter是一个计数器.主要用来计数
计算一个字符串中每个字符出现的次数:
1 from collections import Counter #引入模块,计数器 2 # c = Counter #创建起来和字典差不多 3 list = ["周杰伦", '周杰伦', "孔辉", "大阳哥", "大阳哥", "刘伟", "刘伟"] 4 c = Counter(list) #建一个counter对象 5 print(c) 6 print(c["孔辉"])
2.deque双向队列.
""" 1. 栈: FILO. 先进后出 -> 砌墙的砖头, 老师傅做馒头
2. 队列: FIFO. 先进先出 -> 买火⻋票排队 所有排队的场景
"""
1 from collections import deque 2 d = deque() #创建双向队列 3 d.append("李茶的姑妈") # 默认在右侧添加 4 d.append("无双") 5 d.append("影") 6 d.append("找到你") 7 #让悲伤逆流成河, 理查的姑妈, 无双, 影, 找到你 8 print(d) 9 d.appendleft("让悲伤逆流成河") # 左侧添加 10 print(d) 11 12 13 print(d.pop()) # 从右边删除 14 print(d.pop()) # 从右边删除 15 print(d.popleft()) # 从左边删除 16 print(d.pop()) # 从右边删除 17 print(d)
1 # 队列: 先进先出. First In First Out FIFO 2 # 栈: 先进后出. First In Last Out FILO 3 import queue 4 # q = queue.Queue() # 创建队列 5 # q.put("刘伟") # 放入元素 6 # q.put("大阳哥") 7 # q.put("吴佩琪") 8 # 9 # print(q.get()) # 获取元素 10 # print(q.get()) 11 # print(q.get()) 12 # print(q.get()) # 阻塞了. 在等下一个元素, input() 13 14 # 装馒头的桶 15 # 1. 入栈 16 # 2. 出栈 17 # 属性: 1. 列表(容器) 2.大小(size) 3. 栈顶指针(下一个装元素的位置) 18 class StackFullError(Exception): 19 pass 20 class StackEmptyError(Exception): 21 pass 22 class Stack: 23 def __init__(self, size): 24 self.index = 0 # 栈顶指针 25 self.size = size 26 self.lst = [] # 容器 27 28 def push(self, el): 29 if self.index < self.size: # 还没有装满 30 self.lst.insert(self.index, el) 31 self.index += 1 32 else: # 装满了 33 raise StackFullError("the stack is full!") 34 35 def pop(self): 36 if self.index > 0: 37 self.index -= 1 38 return self.lst[self.index] 39 else: 40 raise StackEmptyError("the stack is empty!") 41 42 # 使用 43 # 1.实例化栈 44 s = Stack(5) 45 s.push("馒头1") 46 print(s.pop()) 47 s.push("馒头2") 48 print(s.pop()) 49 s.push("馒头3") 50 print(s.pop()) 51 s.push("馒头4") 52 print(s.pop()) 53 s.push("馒头5") 54 print(s.pop()) 55 s.push("馒头6") 56 print(s.pop())
3. namedtuple 命名元组
命名元组, 顾名思义. 给元组内的元素进⾏命名. 比如. 我们说(x, y) 这是一个元组. 同
时. 我们还可以认为这是一个点坐标. 这时, 我们就可以使用namedtuple对元素进命名
1 from collections import namedtuple 2 #自己定义一个元祖,如果灵活性好,这就是创建了一个类 3 nt = namedtuple("point",["x","y"]) 4 p = nt(1,2) 5 print(p) 6 7 print(p.x) 8 print(p.y)
4.orderdict和defaultdict
orderdict顾名思义.字典的key默认是无序的.而OrderedDict是有序的
1 dic = {"a":"娃哈哈","b":"百事可乐","c":"阿萨姆"} 2 print(dic) 3 4 from collections import OrderedDict 5 od = OrderedDict({"a":"娃哈哈","b":"百事可乐","c":"阿萨姆"}) 6 print(od)
defaultdict:可以给字典设置默认值.直接获取默认值:
1 from collections import defaultdict 2 d = defaultdict(list) # {} list() 必须是callable 3 d['刘伟'] = "奥特曼" 4 print(d['孔辉']) # 当key不存在的时候. 返回默认值.其实就是callable() 5 print(d['刘伟'])
三.time时间模块(重点)
1. 时间戳(timestamp). 时间戳使⽤的是从1970年01月01日 00点00分00秒到现在
一共经过了多少秒... 使用float来表示
2. 格式化时间(strftime). 这个时间可以根据我们的需要对时间进⾏任意的格式化.
3. 结构化时间(struct_time). 这个时间主要可以把时间进⾏分类划分. 比如. 1970
年01月01日00点00分00秒 这个时间可以被细分为年 ,月,日...一堆东西
1 import time 2 print(time.time()) #时间戳,给机器用的 3 print(time.strftime("%Y/%m/%d %H:%M:%S")) #格式化时间给人看的 4 print(time.localtime()) #结构化时间,用来计算的 5 6 # 时间戳 -> 格式化时间 or 结构化 7 import time 8 9 t = time.localtime(1888888888) # 结构化时间 10 print(t) 11 s = time.strftime("%Y-%m-%d %H:%M:%S", t) # 格式化这个时间 12 print(s)
#格式化时间 ->时间戳
import time
s = "2029-11-09 11:21:28"
st = time.strptime( s ,"%Y-%m-%d %H:%M:%S")
t = time.mktime(st)
print(t)
日期化的标准:
1 %y 两位数的年份表示(00-99) 2 %Y 四位数的年份表示(000-9999) 3 %m ⽉份(01-12) 4 %d ⽉内中的⼀天(0-31) 5 %H 24⼩时制⼩时数(0-23) 6 %I 12⼩时制⼩时数(01-12) 7 %M 分钟数(00=59) 8 %S 秒(00-59) 9 %a 本地简化星期名称 10 %A 本地完整星期 11 %b 本地简化的⽉份名称 12 %B 本地完整的⽉份名称 13 %c 本地相应的⽇期表示和时间表示 14 %j 年内的⼀天(001-366) 15 %p 本地A.M.或P.M.的等价符 16 %U ⼀年中的星期数(00-53)星期天为星期的开始 17 %w 星期(0-6),星期天为星期的开始 18 %W ⼀年中的星期数(00-53)星期⼀为星期的开始 19 %x 本地相应的⽇期表示 20 %X 本地相应的时间表示 21 %Z 当前时区的名称 22 %% %号本身
计算时间差
1 import time 2 true_time = time.mktime(time.strptime("2017-09-11 08:30:00","%Y-%m-%d %H:%M:%S")) 3 time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%S')) 4 dif_time=time_now-true_time 5 struct_time=time.localtime(dif_time) 6 print(struct_time) 7 print('过去了%d年%d⽉%d天%d⼩时%d分钟%d秒'%(struct_time.tm_year- 8 1970,struct_time.tm_mon-1,struct_time.tm_mday-1,struct_time.tm_hour, 9 struct_time.tm_min,struct_time.tm_sec))
四.random模块
所有关于随机的内容都在random模块中.
1 import random 2 3 print(random.random()) #0-1小数 4 print(random.uniform(3,10)) #3-10小数 5 6 print(random.randint(1,10)) #1-10整数 7 print(random.randrange(1,10,2)) #1-10奇数 8 9 print(random.choice([1,"周杰伦",["盖伦","胡辣汤"]])) # 列表中任意一个数 10 print(random.sample([1,"23",[4,5]],2)) #1或者23或者[4,5]) 11 12 lst = [1,2,3,4,5,6,7,8] 13 random.shuffle(lst) #随机打乱顺序 14 print(lst)
五.os模块
所有和操作系统相关的内容都在os模块
1 os.makedirs('dirname1/dirname2') 可生成多层递归目录 2 os.removedirs('dirname1') 若⽬录为空,则删除,并递归到上一级目录,如若也为空,则删 3 除,依此类推 4 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname 5 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中 6 rmdir dirname 7 os.listdir('dirname') 列出指定目录下的所有文件子目录,包括隐藏文件,并以列表方式 8 打印 9 os.remove() 删除一个文件 10 os.rename("oldname","newname") 重命名文件/目录 11 os.stat('path/filename') 获取文件/目录信息 12 os.system("bash command") 运行shell命令,直接显示 13 os.popen("bash command).read() 运行shell命令,获取执行结果 14 os.getcwd() 获取当前⼯作⽬录,即当前python脚本⼯作的⽬录路径 15 os.chdir("dirname") 改变当前脚本⼯作⽬录;相当于shell下cd 16 # os.path 17 os.path.abspath(path) 返回path规范化的绝对路径 18 os.path.split(path) 将path分割成⽬录和⽂件名⼆元组返回 19 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 20 os.path.basename(path) 返回path最后的⽂件名。如何path以/或结尾,那么就会返回空值。 21 即os.path.split(path)的第二个元素 22 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 23 os.path.isabs(path) 如果path是绝对路径,返回True 24 os.path.isfile(path) 如果path是⼀个存在的⽂件,返回True。否则返回False 25 os.path.isdir(path) 如果path是⼀个存在的⽬录,则返回True。否则返回False 26 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第⼀个绝对路径之前的参将被忽略 27 os.path.getatime(path) 返回path所指向的⽂件或者⽬录的最后访问时间 28 os.path.getmtime(path) 返回path所指向的⽂件或者⽬录的最后修改时间 29 os.path.getsize(path) 返回path的⼤⼩ 30 # 特殊属性: 31 os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/" 32 os.linesep 输出当前平台使⽤的⾏终⽌符,win下为" ",Linux下为" " 33 os.pathsep 输出⽤于分割⽂件路径的字符串 win下为;,Linux下为: 34 osname 输出字符串指示当前使⽤平台。win->'nt'; Linux->'posix'
os.stat()属性解读:
1 stat 结构: 2 st_mode: inode 保护模式 3 st_ino: inode 节点号。 4 st_dev: inode 驻留的设备 5 st_nlink: inode 的链接数。 6 st_uid: 所有者的⽤户ID。 7 st_gid: 所有者的组ID。 8 st_size: 普通⽂件以字节为单位的⼤⼩;包含等待某些特殊⽂件的数据。 9 st_atime: 上次访问的时间。 10 st_mtime: 最后⼀次修改的时间。 11 st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在 12 其它系统上(如Windows)是创建时间(详细信息参⻅平台的⽂档)。
六.sys模块
所有和python解释器相关的都在sys模块中.
1 sys.argv 命令⾏参数List,第⼀个元素是程序本身路径 2 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) 3 sys.version 获取Python解释程序的版本信息 4 sys.path 返回模块的搜索路径,初始化时使⽤PYTHONPATH环境变量的值 5 sys.platform 返回操作系统平台