代码改变世界

Python内置模块

2021-11-26 10:30  何小六soso  阅读(78)  评论(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