Python内置模块
2021-11-26 10:30 何小六soso 阅读(79) 评论(0) 编辑 收藏 举报Python内置模块-序列化
为什么要序列化:
数据在程序与网络中操作数据时,需要以更加方便的形式进行存储和传输
系统内置模块
系统内置模块就是安装python解释器后,系统提供的模块
使用时需要导入包后使用
序列化模块
序列化:可以把python中的数据使用文本或者二进制的方式进行转换
反序列化:将文本二进制序列化的内容还原
pickle:二进制化模块,只在python中适用
json:文本序列化
pickle序列化
import pickle
"""
pickle模块提供的函数
dumps() 序列化,可以把python的任意对象进行序列化成二进制
loads() 反序列化,将序列化二进制的数据还原
domp() 序列化,将数据对象序列化后写入文件
load() 反序列化,将序列化数据从文件读取出后进行反序列化
"""
# pickle.dumps() 二进制序列化
vars='i love python'
res=pickle.dumps(vars)
print(res) # b'\x80\x04\x95\x11\x00\x00\x00\x00\x00\x00\x00\x8c\ri love python\x94.'
# pickle.loads() 二进制反序列化
res1=pickle.loads(res)
print(res1) # i love python
# 把字符串序列化后写入文件
vars='i love python'
res=pickle.dumps(vars)
# wb w写入,b二进制方式
with open('./txt/5.txt','wb') as fp:
fp.write(res)
# 读取序列化文件并反序列化
with open('./txt/5.txt','rb') as fp:
res=pickle.loads(fp.read())
print(res) # i love python
# 使用pickle方法读写
# 写入序列化文件
vars={'name':'python','age':'4','sex':'m'}
with open('./txt/5.txt','wb') as fp:
pickle.dump(vars,fp)
# 读取序列化文件
with open('./txt/5.txt','rb') as fp:
res=pickle.load(fp)
print(res) # {'name': 'python', 'age': '4', 'sex': 'm'}
json序列化
# json.dump()序列化写入文件
vars={'name':'python','age':'4','sex':'m'}
with open('./txt/6.txt','w') as fp:
json.dump(res,fp)
# json.load()序列化读取文件
with open('./txt/6.txt','r') as fp:
res=json.load(fp)
print(res,type(res)) # {'name': 'python', 'age': '4', 'sex': 'm'} <class 'dict'>
数学模块Math
# 数学模块Math
import math
# math.celi()向上取整
res = math.ceil(1.32)
print(res) # 2
res = round(1.32) # 四舍五入
print(res) # 1
# math.floor() 向下取整
res = math.floor(1.99)
print(res) # 1
# math.pow() 计算数值的N次方
res = math.pow(3, 2)
print(res) # 9.0
# math.sqrt() 开方运算
res = math.sqrt(9)
print(res) # 3.0
# math.fabs() 计算绝对值
res = math.fabs(-1)
print(res) # 1.0
# math.modf() 将数值拆分成小数和整数,并返回元组
res = math.modf(1.1)
print(res) # (0.10000000000000009, 1.0)
# math.copysign(x,y) 将y的正负号赋值到y
res = math.copysign(1, -3)
print(res) # -1.0
# math.fsum() 将容器类型数据元素进行求和运算
vars = [1, 2, 3, 4, 5, 6]
res = math.fsum(vars)
print(res) # 21.0
随机模块Random
# 随机模块
import random
# random.random() 返回0-1之间的随机数(左闭右开)
res = random.random() # 0.218585409070172
print(res)
# random.randrange(x,y,[z]) 随机获取x到y之间的整数,步进为z,左闭右开
res = random.randrange(1, 10, 2) # 1-3-5-7-9
print(res)
res = random.randrange(1, 10)
print(res)
res = random.randrange(10)
print(res)
# random.randint() 随机产生指定范围内的整数,和randrange()相同
res = random.randint(1, 9)
print(res)
# random.uniform()获取随机小数
res = random.uniform(1, 3)
print(res)
# random.choice() 随机获取容器中的值
res = random.choice('123')
print(res)
res = random.choice([1, 2, 3])
print(res)
# random.shuffle() 随机打乱当前列表中的值
varlist = [1, 2, 3, 4, 5, 6, 7] # [1, 3, 5, 4, 7, 6, 2]
random.shuffle(varlist)
print(varlist)
操作系统接口模块
OS模块
# 系统接口模块OS
import os
# os.getcwd()获取脚本当前运行的工作路径
res = os.getcwd()
print(res) # F:\pythons
# os.chdir()修改当前的工作目录
os.chdir('D:')
res = os.getcwd()
print(res) # D:\
# os.listdir()获取路径下的文件名称返回一个列表
res = os.listdir('D:')
print(
res) # ['$RECYCLE.BIN', '.temp', '360', 'adb', 'AndroidSDK', 'apache-ant', 'apache-maven-3.6.3', 'appium', 'APPScan',
# os.mkdir() 创建文件夹,默认创建在当前python运行的目录下
os.mkdir('python创建的文件夹')
# os.mkdir('D:', 777)
# os.rmdir() 删除空文件夹,目录无法删除
res = os.rmdir('python创建的文件夹')
# os.removedirs递归删除空文件夹
# os.mkdir('a')
# os.mkdir('a/b')
# os.removedirs('a/b')
# os.remove删除文件
with open('a.txt', 'w') as fp:
fp.write('1')
os.remove('a.txt')
# os.rename()修改文件或文件夹名称
# os.mkdir('A')
# os.rename('A', 'aaaaa')
res = os.listdir('D:')
print(res)
print('aaaaa' in res)
# os.system(),执行操作系统命令
res = os.system('ls')
print(res)
# os.path.abspath() 将相对路径转为绝对路径
res = os.path.abspath('./')
print('绝对路径', res) # 绝对路径 D:
# os.path.basename() # 获取路径中的主体部分
res = os.path.basename('D:/A/1.txt')
print(res) # 1.txt 获取文件夹中最后一个文件或者文件夹
# os.path.dirname() 获取绝对路径的相对路径
res = os.path.dirname('D:/A/b/.txt')
print(res) # D:/A/b
# path.join() 链接多个路径,组成一个新路径
res = os.path.join('D:/A/b', 'a.txt')
print(res) # D:/A/b\a.txt
# os.path.split() 拆分路径和主体
# os.splitext() 拆分文件和后缀
# os.path.getsize获取文件的大小
res = os.path.getsize(res)
print(res) # 1
# os.path.isdir()检查文件夹是否存在
res = os.path.isdir('D:/A') # True
print(res)
# os.path.isfile() 检查文件是否存在
res = os.path.isfile('D:/A/b/a.txt')
print(res) # True
# os.path.exists() 检查路径是否存在
res = os.path.exists('D:/A/b/a.txt')
print(res) # True
# os.path.samefile()检查两个路径是否指向同一个文件
a = 'D:/A/b/a.txt'
b = 'D:/A/../A/b/a.txt'
res = os.path.samefile(a, b)
print(res) # True
# os.path.getctime() 获取创建时间
res = os.path.getctime(a)
print(res) # 1638171560.68456
# os.path.getatime() 获取最后一次的访问时间
res = os.path.getatime(a)
print(res) # 1638171560.685558
# os.path.getmtime() 获取最后修改时间
res = os.path.getmtime(a)
print(res) # 1638171560.685558
高级操作模块 shutil
import shutil
# shutil.copy() 复制文件
shutil.copy('D:/A/b/a.txt', 'D:/A/b/copy.txt')
# shutil.copy2() 复制文件,并保存源文件信息(操作时间等信息)
shutil.copy2('D:/A/b/copy.txt', 'D:/A/b/copy2.txt')
# shutil.copytree() 复制整个文件树到指定目录,目标文件夹必须不存在
shutil.copytree('D:/A/b', 'D:/B')
# shutil.rmtree() 递归删除
shutil.rmtree('D:/B')
# shutil.move() 移动文件或文件夹到指定目录,目录必须不存在,也可以修改文件夹或文件的名称
shutil.move('D:/A/b/copy.txt', 'D:/C')
时间模块 time
import time
# time.time() 获取系统时间戳
res = time.time()
print(res) # 1638178470.5199835
# time.ctime() 获取当前系统时间
res = time.ctime()
print(res) # Mon Nov 29 17:34:30 2021
# 根据时间戳获取时间
time.ctime(1638178785.255201)
print(time)
# time.localtime() 获取当前系统时间,返回元组格式数据
res = time.localtime()
print(
res) # time.struct_time(tm_year=2021, tm_mon=11, tm_mday=29, tm_hour=17, tm_min=34, tm_sec=30, tm_wday=0, tm_yday=333, tm_isdst=0)
# 自定义时间格式
res = time.localtime()
print(f'{res.tm_year}年{res.tm_mon}月{res.tm_mday}日 {res.tm_hour}时:{res.tm_min}分{res.tm_sec}秒 星期{res.tm_wday + 1}') # 2021年11月29日 17时:47分25秒 星期1
# time.sleep() 睡眠时间
time.sleep(1)
# time.strftime() 获取当前系统时间并指定格式
res = time.strftime('%Y-%m-%d %H:%M:%S 星期%w') # 2021-11-29 17:52:54
print(res)
# time.perf_counter()计算代码运行时间
start = time.perf_counter()
for i in range(100000):
print(i)
end = time.perf_counter()
print(end - start) # 0.9292879999999999