常用模块的内置方法
一:collection模块
作用:在常见的数据类型上又衍生出一些新的数据类型
(1)nametuple(具名元组):
(1)常规元组里面存放的都是数据 但是不能像字典似的给里面的数据进行描述
(2)具名元组可以对元组里面的数据进行描述
例如:
from collections import namedtuple # point = namedtuple('坐标',['x','y']) # 参数一为描述性信息 参数二为可迭代对象 # p = point(1,2) # 上传的参数 必须与可迭代对象里包含的参数相等 # print(p) # 坐标(x=1, y=2) card = namedtuple('扑克牌',['color','number']) p = card('♠','A') print(p) # 扑克牌(color='♠', number='A'
(2)deque(双栈队列):
(1)双栈队列
(2)其可以对列表里的元素进行双向添加删除
例如:
from collections import deque # number = deque([1,2,3,4]) number.append(66) print(number) # deque([1, 2, 3, 4, 66]) number = deque([1,2,3,4]) number.appendleft(66) print(number) # deque([66, 1, 2, 3, 4]) 头部添加数据 # number = deque([1,2,3,4]) number.pop() print(number) # deque([1, 2, 3]) number = deque([1,2,3,4]) number.popleft() print(number) # qeque([2, 3, 4]) # number = deque([1,2,3,4]) number.insert(1,'six') print(number) # deque([1, 'six', 2, 3, 4]) ''' PS: (1)双栈队列不应该支持索引插入值 只能首尾进行操作 (2)deque有点特殊 # '''
(3)orderdict(有序字典):
(1)常见的字典是无序的
(2)有序字典可以确定key_value顺序
例如:
from collections import OrderedDict user = OrderedDict({'name':'SR','age':18}) print(user) # OrderedDict([('name', 'SR'), ('age', 18)])
(4)defaultdict
(1):如果字典不存在 可以返回一个默认值 而不报错
例如:
from collections import defaultdict values = [11, 22, 33,44,55,66,77,88,99,90] my_dict = defaultdict(list) # 后续key所对应的value都是列表 for value in values: if value>66: my_dict['k1'].append(value) else: my_dict['k2'].append(value) print(my_dict) # defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})
PS:
(1)其不像fromkey当元素都只想一个列表的键值对的值都加入同一个列表中
(2)其创建列表是动态创建的 且不同的key对应不同的列表
(5)counter
(1)其会以字典的键值对进行存储
(2)其中键值对的key为容器中的某元素 value为在容器中出现的次数
例如:
from collections import Counter s =Counter ('asdasdadsasdasd')
print(s) # Counter({'a': 5, 's': 5, 'd': 5}
二:时间模块
(1)time模块
(1)time.sleep:使程序暂停运行 让CPU停止工作
(2)三种表现形式
(1)时间戳
作用:表示从当前时间距离1970年unix元年经过多久时间
例如:
import time print(time.time()) # 1563450970.2688 表示时间S
(2)格式化时间:
作用:根据某些格式可以给用户展示相应的时间
例如:
print(time.strftime('%Y-%m-%d')) # 2019-07-18 年是大写 print(time.strftime('%Y/%m/%d')) # 2019/07/18 格式可以任意书写 print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2019-07-18 19:59:46 print(time.strftime('%Y-%m-%d %X')) # 2019-07-18 20:00:06 %X 等价于%H:%M:%S
(3)结构化时间:
作用:显示年月日时分秒第几周低几天等
import time print(time.localtime()) # time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=20, tm_min=8, tm_sec=24, tm_wday=3, tm_yday=199, tm_isdst=0)
(4)格式化转换方式:
(5)datetime
(1)自定义时间:
例如:
res = datetime.date(2018,12,15) print(res) # 2018-12-15
(2)获取年月日/年月日时分秒
例如:
res = datetime.date.today() print(res) # 2019-07-18 res1 = datetime.datetime.today() print(res1) # 2019-07-18 20:41:03.345300
(3)获取单独日期:
例如:
res1 = datetime.datetime.today() print(res1.year) # 2019 print(res1.month) # 7 print(res1.day) # 18 print(res1.hour) # 20 print(res1.weekday()) # 3表示周四 默认0-6 0表示周一 print(res1.isoweekday()) # 4 周四 默认1-7
(4)timedelta:
作用:对时间进行操作
例如:
tday = datetime.date.today() # 2019-7-18 # 定义操作时间 day=7 也就是可以对另一个时间对象加7天或者减少7点 tdelta = datetime.timedelta(days=7) print(tdelta+tday) # 2019-07-25
PS:
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
三:random模块
作用:根据用户给的条件随机生成一些数据
(1)random:随机生成0-1的小数
例如:
import random print(random.random()) # 0.006161018732437573 print(random.random()) # 0.783492866987172
(2)uniform:随机在一定范围生成小数
例如:
print(random.uniform(3,5)) # 4.822084029788739
(3)randint:在范围内随机选取整数
例如:
import random print(random.randint(1,10)) # 10 print(random.randint(1,10)) # 4
(4)choic:随机选择一个元素返回
例如:
print(random.choice([1,'SR',(5465)])) # 5465 print(random.choice([1,'SR',(5465)])) # SR
(5)shuffle:将元素数据打乱
例如:
number = [1,2,3,4] res = random.shuffle(number) print(number) # [4, 2, 1, 3] print(number) # [2, 4, 1, 3]
练习:随机生成验证码
例如:
# 形参控制用户进行多少位的验证 def index(n): code = '' # 打印随机验证码的位数 for i in range(n): # 生成随机大写字母 upper_str = chr(random.randint(65,90)) # 生成随机小写字母 lower_str = chr(random.randint(97,122)) # 生成随机数字 并且由于要和字符串组合在一起 因此转换成字符串的格式 number_str = str(random.randint(0,9)) # 从上述随机数中进行选择并且组合在一起 # += 因为上述是range循环打印每次打印一个值 +=在原来打印的基础上在拼接一个新的 code += random.choice([upper_str,lower_str,number_str]) # 将字符串返回 return code index()
四:os模块
作用:与操作系统打交道
os.
(1)listdir:将当前路径文件夹下所有的文件展示出来
例如:
import os print(os.listdir(r'E:\编程语言\老男孩Python语言视频\第十六天\代码\day16\老师们的作品'))
(2)dirname(__file__):返回上一次目录
例如:
import os print(os.path.dirname(__file__)) # E:/编程语言/老男孩Python语言视频/第十六天/代码/day16
(3)removdirs:如果目录为空 则删除 并且返回上一级目录
例如:
import os os.removedirs(r'E:\编程语言\老男孩Python语言视频\第十六天\代码\day16\131')
(4)mkdir:生成一个目录
例如:
os.mkdir(r'E:\编程语言\老男孩Python语言视频\第十六天\代码\day16\131')
(5)remove:删除一个文件夹
(6)rename:将文件夹重命名
(7)getcwd:查看当前工作目录
(8)chdir:切换目录 相当于windows cd
os.path
(9)split:将文件夹与文件目录切割 返回元组
例如:
res = os.path.split(r'E:\编程语言\老男孩Python语言视频\第十六天\代码\day16\131') print(res) # ('E:\\编程语言\\老男孩Python语言视频\\第十六天\\代码\\day16', '131')
(10)exists:查看文件路径是否存在 存在返回True
例如:
res = os.path.exists(r'E:\编程语言\老男孩Python语言视频\第十六天\代码\day16\131') print(res) # True
(11)isfile:查看文件夹下文件是否存在
(12)join:文件路径进行拼接
(13)getsize:查看文件的大小
五:sys模块
作用:与python解释器打交道
(1)append:将路径加入文件环境变量中
(2)exit:如果错误退出 则会有提示
(3)version:查看python解释器的版本
(4)path:查看系统环境变量
六:序列化模块
序列:字符串
序列化:将其它数据转换成字符串
反序列化:将字符串转换成其它数据类型
优点:
(1)可以将其余数据类型转成字符串存入文件中 当从文件读取还可以返回原来的数据类型
(2)可以跨语言环境交换信息 例如在python中是字典 传到JAV中 JAVA可以转换成自己独有的类型
模块内置方法:
(1)json
优点:所有语言都支持json格式
缺点:支持的数据类型比较少
(2)pickle
优点:所有数据类型都支持
缺点:只能在python中使用
使用方法:
json:
dumps(序列化):将其余数据类型转换成json格式的字符串
loads(反序列化):将json格式的字符串转换成其余数据类型
例如:
import json user_info = {'name':'SR','age':18} res = json.dumps(user_info) print(res,type(res)) # {"name": "SR", "age": 18} <class 'str'> # PS:双引号为json格式独有的 res1 = json.loads(res) print(res1,type(res1)) # 'name': 'SR', 'age': 18} <class 'dict'>
dump(序列化):将数据类型进行序列化 存入文件中
load(反序列化):将文件类型进行反序列化 转换成其余数据类型
user_info = {'name':'SR','age':18} with open('userinfo','w',encoding='utf-8') as f: json.dump(user_info,f) # {"name": "SR", "age": 18} with open('userinfo','r',encoding='utf-8') as f: res = json.load(f) print(res,type(res)) # {'name': 'SR', 'age': 18} <class 'dict'>
PS:不能多次反序列化 因为被导入文件都在同一行中
元组序列化成集合:
例如:
t = (1,2,3,4) res = json.dumps(t) print(res) # [1, 2, 3, 4]
注意点:
name = {'name':'吉泽明步'} print(json.dumps(name)) # {"name": "\u5409\u6cfd\u660e\u6b65"} print(json.dumps(name,ensure_ascii=False)) # {"name": "吉泽明步"}
pickle:
dumps:将数据序列化成二进制
loads:将二进制转换成原数据
例如:
name = {'name':'吉泽明步'} res = pickle.dumps(name) print(res) # b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x0c\x00\x00\x00\xe5\x90\x89\xe6\xb3\xbd\xe6\x98\x8e\xe6\xad\xa5q\x02s.' res1 = pickle.loads(res) print(res1) # {'name': '吉泽明步'}
dump:必须是b模式下 且不能加入utf-8 因为pickle转换成的是二进制
load:将文件类型转换成数据类型
name = {'name':'吉泽明步'} with open('user','wb') as f: pickle.dump(name,f) with open('user','rb') as f: res = pickle.load(f) print(res) # {'name': '吉泽明步'}