Python进阶-XI 常用模块之一:collections、time、random、os、sys

简要介绍一下各种集合:
  列表、元组、字典、集合(含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())
View 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命令,获取执行结果
View Code

 

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)
View Code

 

你可能感兴趣的:(Python进阶-XI 常用模块之一:collections、time、random、os、sys)