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-1210 %M 分钟数(00=5911 %S 秒(00-5912 %a 本地简化星期名称
13 %A 本地完整星期名称
14 %b 本地简化的月份名称
15 %B 本地完整的月份名称
16 %c 本地相应的期表示和时间表示
17 %j 年内的一天(001-36618 %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下为"
",Linux下为"
"
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 返回操作系统平台名称
原文地址:https://www.cnblogs.com/hq82/p/9758330.html