IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Python(IT峰)笔记09-内置模块:序列化pickle、json,数学模块,随机模块,os模块,os.pathshutil高级文件操作模块,zip压缩模块,时间模块,日历模块 -> 正文阅读

[开发工具]Python(IT峰)笔记09-内置模块:序列化pickle、json,数学模块,随机模块,os模块,os.pathshutil高级文件操作模块,zip压缩模块,时间模块,日历模块

作者:recommend-item-box type_blog clearfix

1、序列化pickle

  • 系统模块,需要时可以导入后使用
  • pickle实现了对python对象的二进制序列化和反序列化。
  • 序列化就是把ptyhon的数据,以文本或二进制的方式进行转换,并且还能发序列化
  • JSON是文本序列化格式,pickle是二进制序列化格式
  • JSON可以直观阅读,而pickle不是

pickle模块提供的函数
dumps()序列化,可以把一个python的任意对象序列化为一个二进制
loads()反序列化,把一个序列化后的二进制数据反序列化为python的对象

使用pickle需要使用import pickle

import pickle
vars='hello world!'#也可以是列表,对象
res=pickle.dumps(vars)#序列化
print(res,type(res))#b'\x80\x04\x95\x10\x00\x00\x00\x00\x00\x00\x00\x8c\x0chello world!\x94.' <class 'bytes'>
res=pickle.loads(res)#反序列化
print(res)#hello world!
  • dump(需要序列化的数据对象,写入的文件对象)序列化,把一个数据对象进行序列化并写入到文件中
  • load()反序列化,在一个文件中读取序列化的数据,并且反序列化
    传统方法
#把数据进行序列化后写入文件,并再次读取出来
import pickle
vars={'name':'zhangsan','age':29,'gender':'female'}
#序列化
res=pickle.dumps(vars)
#写入文件
with open('./datas.txt','wb') as fp:
	fp.write(res)#生成了二进制文件
with open('./datas.txt','rb') as fp:
	res=fp.read()
	#反序列化
	result=pickle.loads(res)
	print(result)#{'name': 'zhangsan', 'age': 29, 'gender': 'female'}

模块方法

#把数据进行序列化后写入文件,并再次读取出来
import pickle
vars={'name':'zhangsan','age':29,'gender':'female'}
# #序列化
# with open('./datas2.txt','wb') as fp:
# 	pickle.dump(vars,fp)#生成二进制文件

with open('./datas2.txt','rb') as fp:
	res=pickle.load(fp)
	print(res)#{'name': 'zhangsan', 'age': 29, 'gender': 'female'}

2、序列化json

json定义:略,主要是也说不明白,会用就行
json类似python的字典
互联网通用的数据交换,交换,定义的数据格式

#把数据进行序列化后写入文件,并再次读取出来
import json
vars={'name':'zhangsan','age':29,'gender':'female'}
res=json.dumps(vars)
print(res,type(res))#{"name": "zhangsan", "age": 29, "gender": "female"} <class 'str'>
result=json.loads(res)
print(result)#{'name': 'zhangsan', 'age': 29, 'gender': 'female'}

使用高级方法进行序列化

#把数据进行序列化后写入文件,并再次读取出来
import json
varjson={"name":"zhangsan","age":29,"gender":"female"}
# with open ('./data1.json','w') as fp:
# 	json.dump(varjson,fp)#生成二进制文件
with open ('./data1.json','r+') as fp:
	res=json.load(fp)
	print(res)#{'name': 'zhangsan', 'age': 29, 'gender': 'female'}

3、数学模块

  • #ceil()向上取整
  • #floor()向下取整
  • #pow()求n次方结果是浮点数
  • #sqrt()开平方运算
  • #fabs()计算绝对值,结果是浮点数
  • #modf()把数值拆分成小数和整数组成的元组
  • #copysign(x,y)把第二个参数的正负符号拷贝给第一个参数
  • #fsum()讲一个容器类型数据中的元素进行一个求和运算,结果为浮点数
  • #factroial(x)返回一个数的阶乘,结果为整数
  • #常量pi
import math
#ceil()向上取整
res=math.ceil(3.254)
print(res)#4
#使用内置函数round有类似功能,四舍五入
res=round(3.23)
print(res)#3
#floor()向下取整
res=math.floor(3.25)
print(res)#3
#pow()求n次方结果是浮点数
res=math.pow(2,4)
print(res)#16.0
#sqrt()开平方运算
res=math.sqrt(8)
print(res)#2.8284271247461903
#fabs()计算绝对值,结果是浮点数
res=math.fabs(-100)
print(res)#100.0
#modf()把数值拆分成小数和整数组成的元组
res=math.modf(3.34)
print(res)#(0.33999999999999986, 3.0)
#copysign(x,y)把第二个参数的正负符号拷贝给第一个参数
x=3
y=-5
res=math.copysign(x,y)
print(res)#-3.0
#fsum()讲一个容器类型数据中的元素进行一个求和运算,结果为浮点数
res=math.fsum([1,2,3,4,5])
print(res)#15.0
#factroial(x)返回一个数的阶乘,结果为整数
res=math.factorial(5)
print(res)#120
#常量pi
res=math.pi
print(res)#3.141592653589793

4、随机模块-random

各种各样的随机方法
随机数应用场景,数字验证码,高并发下的订单号

  • random()返回0-1之间的随机小数,左闭右开,取不到1,但可以取到0
  • randrange(开始值,结束值,步进值)随机获取指定范围内的整数
  • randint(开始,结束)随机整数,返回为左闭右闭
  • uniform(开始,结束)获取范围内的随机小数
  • choice()随机获取容器类型中的值
  • shuffle()随机打乱当前列表的值,直接改变当前列表
import random
#random()返回0-1之间的随机小数,左闭右开,取不到1,但可以取到0
res=random.random()
print(res)#0.7315819085055987等
#randrange(开始值,结束值,步进值)随机获取指定范围内的整数
res=random.randrange(3,69,2)
print(res)#5等
#randint(开始,结束)随机整数,返回为左闭右闭
res=random.randint(3,10)
print(res)#5,可以取到10
#uniform(开始,结束)获取范围内的随机小数
res=random.uniform(5,10)
print(res)#8.458699968410029
#choice()随机获取容器类型中的值
res=random.choice([1,2,4,7,89,0])
print(res)#89
#shuffle()随机打乱当前列表的值,直接改变当前列表
varlist=[1,2,3,4,5,6]
random.shuffle(varlist)
print(varlist)#[1, 3, 2, 4, 6, 5]

5、OS操作系统接口模块1

提供了一些方便使用操作系统的函数

  • getcwd()获取当前工作目录,python的执行目录
  • chdir()修改当前的工作目录
import os
#getcwd()获取当前工作目录,python的执行目录
res=os.getcwd()
print(res)#E:\MyProject\python\ex01
#chdir()修改当前的工作目录
os.chdir('E:\MyProject\python')
res=os.getcwd()
print(res)#E:\MyProject\python

6、OS操作系统接口模块2

  • listdir()返回项目的文件夹及文件列表
  • mkdir()创建文件夹,不能递归创建(路径中的文件夹一定要连续有,不能是不存在的目录)
  • remove()删除文件
  • rename(‘old’,‘new’)修改文件或文件夹的名字
  • system()执行操作系统中的命令
import os

#listdir()返回项目的文件夹及文件列表
res=os.listdir()
print(res)#['.idea', 'venv', 'sayhi.txt', 'sayhello.txt', 'hello.py', 'datas.txt', 'datas2.txt', 'data1.json', 'testpackage']
#mkdir()创建文件夹,不能递归创建(路径中的文件夹一定要连续有,不能是不存在的目录)
#os.mkdir('hello')#在当前工作目录下创建hello文件夹
#remove()删除文件
#os.remove('./data1.json')#删除了文件
#rename('old','new')修改文件或文件夹的名字
os.rename('hello','world')#修改了文件夹名字为world
#system()执行操作系统中的命令
os.system('hello.py')

7、OS.path操作系统接口模块3

  • abspath()相对路径转化为绝对路径
  • basename()获取路径中的主体部分,就是路径中的最后一部分
  • dirname()获取路径中的路径部分,实际就是.之前的路径
  • join(path1,path2)将两个路径拼接
  • split()拆分路径为路径和主体部分,吧最后一部分拆开,返回了一个元祖
  • splitext()拆分路径可以拆分文件后缀名
  • getsize()获取文件的大小字节数
  • isdir()检测是否是一个文件夹,是否存在
  • isfile()检测文件是否存在
  • exists()检测路径是否存在,既可以检测文件也可以检测路径
  • samefile(file1,file2)检测两个路径(一个相对,一个绝对路径)是否同一个文件(指向同一个文件),这两个文件必须都真实存在
import os
#abspath()相对路径转化为绝对路径
res=os.path.abspath('./')
print(res)#E:\MyProject\python\ex01
#basename()获取路径中的主体部分,就是路径中的最后一部分
res=os.path.basename('E:\MyProject\python\ex01')
print(res)#ex01
#dirname()获取路径中的路径部分,实际就是.之前的路径
res=os.path.dirname('E:\MyProject\python\ex01\hello.py')
print(res)#E:\MyProject\python\ex01
#join(path1,path2)将两个路径拼接
res=os.path.join('E:\MyProject\python\ex01','hello.py')
print(res)#E:\MyProject\python\ex01\hello.py
#split()拆分路径为路径和主体部分,吧最后一部分拆开,返回了一个元祖
res=os.path.split('E:\MyProject\python\ex01\hello.py')
print(res)#('E:\\MyProject\\python\\ex01', 'hello.py')
#splitext()拆分路径可以拆分文件后缀名
res=os.path.splitext('E:\MyProject\python\ex01\hello.py')
print(res)#('E:\\MyProject\\python\\ex01\\hello', '.py')
#getsize()获取文件的大小字节数
res=os.path.getsize('E:\MyProject\python\ex01\hello.py')
print(res)#1078
#isdir()检测是否是一个文件夹,是否存在
res=os.path.isdir('E:\MyProject\python\ex01')
print(res)#True
#isfile()检测文件是否存在
res=os.path.isfile('E:\MyProject\python\ex01\hello.py')
print(res)#True
#exists()检测路径是否存在,既可以检测文件也可以检测路径
res=os.path.exists('E:\MyProject\python\ex01\hello.py')
print(res)#True
#samefile(file1,file2)检测两个路径(一个相对,一个绝对路径)是否同一个文件(指向同一个文件),这两个文件必须都真实存在
res=os.path.samefile('E:\MyProject\python\ex01\hello.py','./hello.py')
print(res)#True

8、shutil高层次文件操作模块

  • copy(source,aim)复制文件
  • copy2()和copy方法一样,可以把拷贝未见到指定目录,保留了源文件的信息(操作时间和权限等)
  • copyfile()拷贝文件的内容(打开文件,读取内容,写入到新的文件中)
  • copytree(source,aim)拷贝文件树
  • rmtree()删除整个文件夹
  • move(source,aim)移动文件或文件夹到指定目录,也可以用于修改文件夹或文件的名称
import shutil
#copy(source,aim)复制文件
#shutil.copy('datas.txt','dalta.txt')#拷贝并创建了dala.txt
#copy2()和copy方法一样,可以把拷贝未见到指定目录,保留了源文件的信息(操作时间和权限等)
#copyfile()拷贝文件的内容(打开文件,读取内容,写入到新的文件中)
#shutil.copyfile('datas2.txt','datas3.txt')#创建了datas3.txt,并将data2.txt的内容拷贝进去
#copytree(source,aim)拷贝文件树
#shutil.copytree('./testfather','./hello/')#创建了hello文件夹并将testfahter下的文件拷贝到hello文件夹中
#rmtree()删除整个文件夹
#shutil.rmtree('./hello')#删除了hello目录
#move(source,aim)移动文件或文件夹到指定目录,也可以用于修改文件夹或文件的名称
shutil.move('./testfather','./world')#testfahter被移动到world文件夹里去了

9、zip压缩模块zipfile

压缩文件
要import 一个zipfile模块
Zipfile(文件路径,压缩模式,压缩或打包),文件路径为期望压缩后的文件路径

import zipfile

#Zipfile(文件路径,压缩模式,压缩或打包),文件路径为期望压缩后的文件路径,
with zipfile.ZipFile('./myzip','w') as zf:
	zf.write('./dalta.txt')#压缩第一个文件
	zf.write('./datas.txt')
	zf.write('./datas2.txt')
	zf.write('./datas3.txt')#压缩第4个文件,最后成为一个压缩包

解压缩

#Zipfile文件路径,压缩模式,压缩或打包),文件路径为期望压缩后的文件路径,
with zipfile.ZipFile('./myzip','r') as zf:
	zf.extractall(path='./world')#解压缩到特定目录

10、时间模块time

#time()获取当前系统的时间戳
#ctime()获取当前系统时间的字符串及指定时间的字串
#localtime()获取当前的系统时间的元组
#strftime()格式化时间 年-月-日 时:分:秒 星期几
#sleep(number)暂定当前线程的执行number秒

import time
#获取当前系统的时间戳
res=time.time()
print(res)#1631841951.7837114
#获取当前系统时间的字符串及指定时间的字串
res=time.ctime()
print(res)#Fri Sep 17 09:27:50 2021
res=time.ctime(1636781951.7837114)
print(res)#Sat Nov 13 13:39:11 2021
#获取当前的系统时间的元组
res=time.localtime()
print(res)#time.struct_time(tm_year=2021, tm_mon=9, tm_mday=17, tm_hour=9, tm_min=29, tm_sec=34, tm_wday=4, tm_yday=260, tm_isdst=0)
#strftime()格式化时间 年-月-日 时:分:秒 星期几
res=time.strftime('%Y-%m-%d %H:%M:%S %w')
print(res)#2021-09-17 09:58:12 5
#sleep(number)暂定当前线程的执行number秒
print(time.strftime('%Y-%m-%d %H:%M:%S %w'))#2021-09-17 10:01:29 5
time.sleep(3)
print(time.strftime('%Y-%m-%d %H:%M:%S %w'))#2021-09-17 10:01:32 5

11、日历模块

import calendar
#mothrange(年,月)返回指定年份和月份数据的第一天的是周几以及月份中的天数
res=calendar.monthrange(2021,5)
days=res[1]#当前月份的天数
w=res[0]+1#当前月份第一天周几的信息
print(res)#(5, 31)



  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:23:12  更:2021-09-18 10:23:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/23 5:57:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计