简要介绍一下各种集合:
列表、元组、字典、集合(含frozenset)、字符串、堆栈(如手枪弹夹:先进后出)、队列(如马克沁机枪的弹夹:先进先出)
1、collections
1)queue 队列介绍
如马克沁机枪的弹夹:先进先出,还如排队买票,先排的先买!
import queue q = queue.Queue() q.put([1, 2, 3]) q.put(4) q.put(5) print(q) # 队列是一个黑盒子,你看不到里面放着什么! q.get() # 得到[1, 2, 3] q.get() # 得到4 print(q.get()) #打印:5 q.get() # 停在这,除非有新的元素加入,否则一直停在这等待! --程序阻塞
2)命名元组
from collections import namedtuple Point = namedtuple('point',['x', 'y', 'z']) p1 = Point(22,11,33) p2 = Point(2,11,2) p3 = Point(5,2,5) print(p1.x) print(p3.z) print(p1,p2,p3) #扑克牌中的花色和数字 Card = namedtuple('card', ['suits', 'num']) c1 = Card('红桃', 'K') c2 = Card('方块', 7) c3 = Card('梅花', 2) print(c1, c2) print(c2.num)
3)deque双端队列 可从队列的两端操作,比队列快!
rom collections import deque dq = deque([1,2]) dq.append('a') # 从后面放数据 [1,2,'a'] dq.appendleft('b') # 从前面放数据 ['b',1,2,'a'] dq.insert(2,3) #['b',1,3,2,'a'] print(dq.pop()) # 从后面取数据 a print(dq.pop()) # 从后面取数据 2 print(dq.popleft()) # 从前面取数据 b print(dq) # deque([1, 3])
4)有序字典 OrderedDict
from collections import OrderedDict od = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) print(od) # OrderedDict的Key是有序的 print(od['a']) for k in od: print(k)
5)默认字典
众所周知,在Python中如果访问字典中不存在的键,
会引发KeyError异常(JavaScript中如果对象中不存在某个属性,则返回undefined)。
但是有时候,字典中的每个键都存在默认值是非常方便的。
from collections import defaultdict d = defaultdict(lambda : 5) print(d['k']) # 不存在该key,所以返回默认的5 dict1 = defaultdict(int) dict2 = defaultdict(set) dict3 = defaultdict(str) dict4 = defaultdict(list) dict1[2] = 'two' print(dict1[1]) # 0 print(dict2[1]) # set() print(dict3[1]) # '' print(dict4[1]) # []
2、time模块
时间的三种表达方式
1)时间戳 —— float时间 : 计算机看的
t = time.time()
2)格式化时间 —— 字符串: 给人看的
#strftime
print(time.strftime("%Y-%m-%d %a %H:%M:%S")) #year month day HOUR MINUTE SECOND print(time.strftime("%Y/%m/%d %H:%M:%S")) #year month day HOUR MINUTE SECOND print(time.strftime("%m-%d %H:%M:%S")) #year month day HOUR MINUTE SECOND print(time.strftime("%H:%M:%S")) #year month day HOUR MINUTE SECOND print(time.strftime("%H:%M")) #year month day HOUR MINUTE SECOND
3)结构化时间 —— 元祖 :计算用的
truct_time = time.localtime()
print(struct_time)
print(struct_time.tm_year)
4) 时间戳和结构化时间 各种转换
# (1)时间戳转结构化
print(t) print(time.localtime(3000000000)) print(time.gmtime(t))
# (2)结构化转时间戳
print(time.mktime(time.localtime()))
# (3)格式化转结构化
print(time.strptime('2000-12.31','%Y-%m.%d'))
# (4)时间戳转格式化
print(time.strftime('%m/%d/%Y %H:%M:%S',time.localtime(3000000000)))
print(time.asctime()) #Wed Dec 4 22:09:08 2019
3、random模块

1 # 1)产生随机整数的三种方法: 2 print(random.randint(1, 10)) # 随机生成[1,10]之间的整数 3 print(random.randrange(1, 10, 2)) # 随机生成[1,10)之间的奇数,最后一个参数2是步长 4 5 # 2)产生一个随机小数的两种方法: 6 print(random.random()) # 返回随机生成的一个实数,它在[0,1)范围内。 7 print(random.uniform(2, 4)) # 返回随机生成的一个实数,它在(2,4)范围内。 8 9 # 3)从序列中随机选取一个元素 10 random.choice([1, '23', [4, 5]]) # #1或者23或者[4,5] 11 print(random.choice('tomorrow')) 12 13 # 4)随机选择多个返回,返回的个数为函数的第二个参数 14 random.sample([1, '23', [4, 5]], 2) # 列表元素任意2个组合 15 16 # 5)打乱列表顺序 17 item = [1, 3, 5, 7, 9] 18 random.shuffle(item) 19 print(item) 20 21 # 6)综合实例:随机生成验证码 22 '''分析: 23 随机生成4个字符,包含A-Za-z0-9 24 字母考虑用ascii码:,这样都是数字,好随机生成:''' 25 import random 26 def create_4_verification_code(): 27 ''' 28 生成四位固定格式的验证码:字母+数字+字母+数字 29 :return: 验证码 30 ''' 31 verification_code = '' 32 33 verification_code += chr(random.randint(65, 90)) 34 verification_code += str(random.randint(0, 9)) 35 verification_code += chr(random.randint(97, 122)) 36 verification_code += str(random.randint(0, 9)) 37 38 return verification_code 39 40 print(create_4_verification_code()) 41 42 def v_code(): 43 ''' 44 随机生成四位包含数字、大小写英文字母的验证码 45 :return: 四位验证码 46 ''' 47 code = '' 48 for i in range(4): 49 num = random.randint(0, 9) 50 alf = chr(random.randint(97, 122)) 51 alf = chr(random.randint(65, 90)) if random.randint(1, 2) == 2 else alf 52 add = random.choice([num, alf]) 53 code = ''.join([code, str(add)]) 54 return code 55 56 print(v_code())
4、os模块
是与操作系统交互的一个接口

1 import os 2 # 1、os模块的属性 3 os.sep # 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" 4 os.linesep # 输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n" 5 os.pathsep # 输出用于分割文件路径的字符串 win下为;,Linux下为: 6 os.name # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' 7 # 2、常见的方法介绍 8 # 1)目录相关 9 os.makedirs('dirname1/dirname2') # 可生成多层递归目录 10 os.removedirs('dirname1') # 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 11 os.mkdir('dirname') # 生成单级目录;相当于shell中mkdir dirname 12 os.rmdir('dirname') # 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 13 os.listdir('dirname') # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 14 15 os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径 16 os.chdir("dirname") # 改变当前脚本工作目录;相当于shell下cd 17 # 2)文件相关 18 os.remove() 19 os.rename("oldname","newname") # 重命名文件/目录 20 os.stat('path/filename') # 获取文件/目录信息 21 # 注意:os.stat('path/filename') 获取文件/目录信息 的结构说明 22 # stat 结构: 23 24 # st_mode: inode 保护模式 25 # st_ino: inode 节点号。 26 # st_dev: inode 驻留的设备。 27 # st_nlink: inode 的链接数。 28 # st_uid: 所有者的用户ID。 29 # st_gid: 所有者的组ID。 30 # st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。 31 # st_atime: 上次访问的时间。 32 # st_mtime: 最后一次修改的时间。 33 # st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。 34 35 # 3)路径相关 os.path 36 path = '' 37 path1 = '' 38 path2 = '' 39 os.path.abspath(path) # 返回path规范化的绝对路径 40 os.path.split(path) # 将path分割成目录和文件名二元组返回 41 os.path.dirname(path) # 返回path的目录。其实就是os.path.split(path)的第一个元素 42 os.path.basename(path) #返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 43 os.path.exists(path) # 如果path存在,返回True;如果path不存在,返回False 44 os.path.isabs(path) # 如果path是绝对路径,返回True 45 os.path.isfile(path) # 如果path是一个存在的文件,返回True。否则返回False 46 os.path.isdir(path) # 如果path是一个存在的目录,则返回True。否则返回False 47 os.path.join(path1, path2) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 48 os.path.getatime(path) # 返回path所指向的文件或者目录的最后访问时间 49 os.path.getmtime(path) # 返回path所指向的文件或者目录的最后修改时间 50 os.path.getsize(path) # 返回path的大小 51 52 # 4)、其他 53 os.system("bash command") # 运行shell命令,直接显示 54 os.popen("bash command).read()") # 运行shell命令,获取执行结果
5、sys模块

1 import sys 2 sys.argv #命令行参数List,第一个元素是程序本身路径 3 sys.exit(n) #退出程序,正常退出时exit(0),错误退出sys.exit(1) 4 sys.version #获取Python解释程序的版本信息 5 sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platform #返回操作系统平台名称 7 8 # 异常处理和status 9 try: 10 sys.exit(1) 11 except SystemExit as e: 12 print(e)