22_模块01
一、定义
1、Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块能定义函数,类和变量,模块里也能包含可执行的代码。
模块导入的方式:(1) import 模块 (2) from xxx import 模块
1 import module1[, module2[,... moduleN]] 2 模块名.函数名 #调用 3 4 from modname import name1[, name2[, ... nameN]] 5 6 from modname import * # 把一个模块的所有内容全都导入到当前的命名空间也是可行
2、模块搜索路径顺序
(1)、当前目录
(2)、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
(3)、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录
二、collections模块
1、Counter 计数器
1 low: 2 s = "alex like pig" 3 dic = {} 4 for el in s: 5 dic[el] = dic.get(el, 0) + 1 6 print(dic) 7 8 9 nb: 10 s = "alex like pig" 11 print(Counter(s)) # 获取到的结果可以像字典⼀样进⾏使⽤ [key]
2、 deque 双向队列
(重点)说双向队列之前我们需要了解两种数据结构. 1. 栈, 2. 队列
(1) 栈: FILO. 先进后出 -> 砌墙的砖头, 老师傅做馒头
(2)队列: FIFO. 先进先出 -> 买火?票排队, 所有排队的场景
栈的编写
1 class StackEmptyError(Exception): 2 pass 3 class StackFullError(Exception): 4 pass 5 class Stack: 6 def __init__(self, size): 7 self.size = size 8 self.lst = [] 9 self.index = 0 10 11 def push(self, el): 12 if self.index > self.size: 13 raise StackFullError('stack is Full') 14 else: 15 self.lst.insert(self.index, el) 16 self.index += 1 17 18 def pop(self): 19 if self.index > 0: 20 self.index -= 1 21 ret = self.lst[self.index] 22 return ret 23 else: 24 raise StackEmptyError('the stack is empty') 25 26 def clear(self): 27 self.lst.clear() 28 self.index = 0 29 def max(self): 30 return self.size 31 def now(self): 32 return self.index
队列:python提供了queue模块
1 import queue 2 q = queue.Queue() 3 q.put("李嘉诚") 4 q.put("张开") 5 q.put("张毅") 6 print(q) 7 print(q.get()) 8 print(q.get()) 9 print(q.get())
注意: 如果队列没有元素了. 再也就拿不出来元素了. 此时程序会阻塞
1 from collections import deque 2 q = deque() 3 q.append("张开") # 右侧添加 4 q.append("包尔") 5 q.appendleft("赵廷") # 左侧添加 6 q.appendleft("还我圆圆") 7 print(q) 8 print(q.pop()) # 右侧删除 9 print(q.popleft()) # 左侧删除
3、namedtuple 命名元组
1 from collections import namedtuple 2 # 定义了个元组, 如果灵性够好, 这其实就是创建了个类 3 nt = namedtuple("point", ["x", "y"]) 4 p = nt(1, 2) 5 print(p) 6 print(p.x) 7 print(p.y) 8 结果: 9 point(x=1, y=2) 10 1 11 2
4、OrderedDict defaultdict
python3.6使用了新算法,来自pypy,节约了20-30%内存,字典查询快是用空间换取了时间。ordeeddict更加浪费空间
1 from collections import defaultdict 2 dd = defaultdict(list) # 默认值list 3 print(dd['娃哈哈']) # [] 当key不存在的时候. 会⾃动执⾏构造⽅法中传递的内容
三、time 时间模块(重点)
1、时间戳
1 import time
2 print(time.time()) # 1538927647.483177 系统时间
(1)时间戳(timestamp). 时间戳使的是从1970年01月01日 00点00分00秒到现在共经过了多少秒... 使float来表示
(2) 格式化时间(strftime). 这个时间可以根据我们的需要对时间进任意的格式化.
(3) 结构化时间(struct_time). 这个时间主要可以把时间进分类划分. 比如. 1970年01月01日 00点00分00秒 这个时间可以被细分为年...
2、格式化时间
1 s = time.strftime("%Y-%m-%d %H:%M:%S") # 必须记住 2 print(s) 3 4 %y 两位数的年份表示(00-99) 5 %Y 四位数的年份表示(000-9999) 6 %m 月份(01-12) 7 %d 月内中的天(0-31) 8 %H 24时制时数(0-23) 9 %I 12时制时数(01-12) 10 %M 分钟数(00=59) 11 %S 秒(00-59) 12 %a 本地简化星期名称 13 %A 本地完整星期名称 14 %b 本地简化的月份名称 15 %B 本地完整的月份名称 16 %c 本地相应的期表示和时间表示 17 %j 年内的一天(001-366) 18 %p 本地A.M.或P.M.的等价符 19 %U 一年中的星期数(00-53)星期天为星期的开始 20 %w 星期(0-6),星期天为星期的开始 21 %W 年中的星期数(00-53)星期一为星期的开始 22 %x 本地相应的日期表示 23 %X 本地相应的时间表示 24 %z 当前时区的名称 25 %% %号本身
3、结构化时间
print(time.localtime())
4、时间戳<——>格式化时间(所有的转化都要通过结构化时间来转化)
1 t = time.localtime(1888888888) # 结构化时间 2 s = time.strftime("%Y-%m-%d %H:%M:%S", t) # 格式化这个时间 3 print(s)
1 s = "2020-10-01 12:18:12" 2 t = time.strptime(s, "%Y-%m-%d %H:%M:%S") # 转化成结构时间 3 print(time.mktime(t)) # 转换成时间戳
5、时间差计算
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-1970,struct_time.tm_mon-1,struct_time.tm_mday-1,struct_time.tm_hour,struct_time.tm_min,struct_time.tm_sec))
四、random模块
1 import random 2 print(random.random()) # 0-1小数 3 print(random.uniform(3, 10)) # 3-10小数 4 print(random.randint(1, 10)) # 1-10整数 [1, 10] 5 print(random.randrange(1, 10, 2)) # 1-10奇数 [1,10) 6 print(random.choice([1, '周杰伦', ["盖伦", "胡辣汤"]])) # 1或者23或者[4,5]) 7 print(random.sample([1, '23', [4, 5]], 2)) # 列表元素任意2个组合 8 lst = [1, 2, 3, 4, 5, 6, 7, 8] 9 random.shuffle(lst) # 随机打乱顺序 10 print(lst)
五、os模块(所有和操作系统相关的内容都在os模块)
1 os.makedirs('dirname1/dirname2') 可生成多层递归目录 2 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 3 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname 4 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 5 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表形式打印 6 os.remove() 删除一个文件 7 os.rename("oldname","newname") 重命名文件/目录 8 os.stat('path/filename') 获取文件/目录信息 9 os.system("bash command") 运行shell命令,直接显示 10 os.popen("bash command).read() 运行shell命令,获取执行结果 11 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 12 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 13 14 # os.path 15 os.path.abspath(path) 返回path规范化的绝对路径 16 os.path.split(path) 将path分割成目录和文件名二元组返回 17 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 18 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 19 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 20 os.path.isabs(path) 如果path是绝对路径,返回True 21 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 22 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 23 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 24 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 25 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 26 os.path.getsize(path) 返回path的大小 27 # 特殊属性: 28 os.sep 输出操作系统特定的路径分隔符, win下为"\\",Linux下为"/" 29 os.linesep 输出当前平台使用的行终止符, win下为"\r\n",Linux下为"\n" 30 os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: 31 os.name 输出字符串指示当前使用平台。 win->'nt'; Linux->'posix' 32 33 os.stat() 属性解读 34 stat 结构: 35 st_mode: inode 保护模式 36 st_ino: inode 节点号。 37 st_dev: inode 驻留的设备。 38 st_nlink: inode 的链接数。 39 st_uid: 所有者的⽤户ID。 40 st_gid: 所有者的组ID。 41 st_size: 普通⽂件以字节为单位的⼤⼩;包含等待某些特殊⽂件的数据。 42 st_atime: 上次访问的时间。 43 st_mtime: 最后⼀次修改的时间。 44 st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参⻅平台的⽂档)
六、sys模块(所有和python解释器相关的都在sys模块)
1 sys.argv 命令行参数List,第一个元素是程序本身路径 2 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.exit(-1) 3 sys.version 获取Python解释程序的版本信息 4 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 5 sys.platform 返回操作系统平台名称