常用模块
'''
在内置数据类型(dict、list、set、tuple)的基础上,collecttions模块还提供了额外的数据类型:Counter、deque、defaultdict、namedtuple和Ordereddict等。
1、namedtuple:具名元组,具有名字的元组,生成可以使用名字来访问元素内容的tuple
2、deque:双端队列,可以快速的从另外一侧追加和推出对象
3、Counter:计数器,主要用来计数
4、OrderedDict:有序字典
5、defaultdict:带有默认值的字典
'''
#namedtuple
用具名元组来记录一个城市的信息
>>> from collections import namedtuple >>> City = namedtuple('City','name country population coordinates') #第一个是类明明,第二个是类的各个字段的名字,后者可以是由数个字符串组成的可迭代对象,或者是由空格分隔开的字段名组成的字符。 >>> tokyo = City('Tokyo','JP',36.933,(35.689722,139.691667)) >>> tokyo City(name='Tokyo', country='JP', population=36.933, coordinates=(35.689722, 139.691667)) >>> City(name='Tokyo',country='JP',population=36.933,coordinates=(35.689722,139.691667)) >>> tokyo.population 36.933 >>> tokyo.coordinates (35.689722, 139.691667) >>> tokyo[1] 'JP'
队列:先进先出FIFO(first in first out)
deque 双端队列
两端都能进值,两端都能取值
特殊点:双端队列可以根据索引在任意位置插值
队列不应该支持任意位置插值,只能在首尾插值(不能插队)
四种方法:append(尾部追加),appendleft,pop(末尾取值),popleft
OrderedDict 有序字典
from collections import OrderedDict order_d = OrderedDict([('a',1),('b',2),('c',3)]) order_d1 = OrderedDict() order_d1['x'] = 1 order_d1['y'] = 2 order_d1['z'] = 3 print(order_d1) for i in order_d1: print(i) #print(order_d1)
defaultdict默认值字典
有如下值集合[11,22,33,44,55,66,77,88,99...],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。
Counter
#例:统计s = 'abcdeabcdabcaba'这个字符串每一个字符,在当前字符串出现的次数 from collections import Counter s = 'abcdeabcdabcaba' res = Counter(s) print(res)
时间模块
time时间的表达形式有三种:
1、时间戳
2、格式化时间(主要是用来展示给人看的)
3、结构化时间
时间戳、结构化时间、格式化时间之间的互相转换
时间之间的运算
小练习:计算今天距离今年过生日还有多少天
birth = datetime.data(2019,12,21) current_time = datetime.date.today() print(birth-current_time) #156 days, 0:00:00
UTC时间
random模块:随机模块
例:生成5位数的随机验证码,大写字母、小写字母、数字
chr
random.choice
封装成一个函数,用户想生成几位就生成几位
def get_code(n): cofe = '' for i in range(n): #先生成随机的大写字母,小写字母,数字 upper_str = chr(random.randint(65,90)) lower_str = chr(random.randint(97.122)) random_int = str(random.randint(0,9)) #从上面三个钟随机选择一个作为随机验证码的某一位 code + =random.choice([upper_str,lower_str,random_int]) return(code) res = get_code(4) print(res)
os模块:跟操作系统打交道的模块
常见的
序列化模块
序列:字符串
序列化:其他数据类型转换成字符串的过程
1、写入文件的数据必须是字符串
2、基于网络传输的数据必须是二进制
str.encode()才能变成二进制,统一转成字符串,才能转成二进制
因为只有转成了字符串,才能够做一个数据的存储(传输)
序列化:其他数据类型转成字符串的过程
反序列化:字符串转成其他数据类型
json模块
1、能够将数据类型转换成字符串存起来,基于网络传输
2、所有的语言都支持json格式(相当于中间人)
缺点:支持的数据类型很少
支持:(字符串、列表、字典、整型、元组(转成列表来存的)、布尔值,这几个是可以序列化的
dumps:序列化,将其他数据类型转成json格式的字符串
loads:反序列化,将json格式的字符串转换成其他数据类型
d = {"name":"jason"} print(d) res = json.dumps(d) #json格式的字符串,必须是双引号,它内部对应的是:'{"name":"jason"}',外层是单引号,内层是双引号 print(res,type(res)) res1 = json.loads(res) #loads一下又从字符串变成字典 print(res1,type(res1))
dump:传文件
load:传文件
d = {"name":"jason"} #写入文件 with open('userinfo','w',encoding='utf-8') as f: json.dump(d,f) #先转字符串并自动写入文件 json.dump(d,f) #取出来 with open('userinfo','r',encoding='utf-8') as f: res1 = json.load(f) #不能够多次反序列化 res2 = json.load(f) print(res1,type(res1)) print(res2,type(res2))
ensure_ascii=False 不要转码
pickle模块
缺点:只支持python语言
优点:python所有的数据类型都支持
用pickle操作文件的时候,文件的打开模式必须是b模式
subprocess(子进程)
sub:子
process:进程
1、用户通过网络连接上了你的这台电脑
2、用户输入相应的命令,基于网络发送给了你这台电脑上摸个程序
3、获取用户命令,里面subprocess执行该用户命令
4、将执行结果再基于网络发送给用户
这样就实现用户远程操作你这台电脑的操作