系统内置模块就是按照python解释器后,系统给提供的模块 在需要时可以导入后使用,例如:json、re、os…
一. 序列化模块
序列化是指可以把python中的数据、以文本或者二进制的方式进行转换,并且还能反序列化为原来的数据 文本序列化模块 json 二进制序列化模块 pickle
1. pickle 序列化
import pickle
'''
为什么要序列化?
一般数据在程序与网络中进行传输和存储时,需要以更加方便的形式进行操作。因此需要对数据进行序列化
pickle 模块提供的函数
dumps() 序列化,可以把一个python的任意对象序列化成为一个二进制
loads() 反序列化,可以把一个序列化后的二进制数据反序列化为一个python的对象
dump() 序列化,把一个数据对象进行序列化并写入到文件中
参数1: 需要序列化的数据对象
参数2: 写入的文件对象
pickle.dump(var,fp)
load() 反序列化,在一个文件中读取序列化后的数据,并且完成一个反序列化
参数1: 读取的文件对象
pickle.load(fp)
'''
vars = 'i love you'
vars = [1,2,3,4]
res = pickle.dumps(vars)
print(res,type(res))
res = pickle.loads(res)
print(res,type(res))
vars = {'name':'张三','age':23,'sex':'m'}
res = pickle.dumps(vars)
with open('./data.txt','wb') as fp:
fp.write(res)
with open('./data.txt','rb') as fp:
res = fp.read()
vardict = pickle.loads(res)
print(vardict)
vars = {'name':'张三','age':23,'sex':'m'}
with open('./data2.txt','wb') as fp:
pickle.dump(vars,fp)
with open('./data2.txt','rb') as fp:
newdict = pickle.load(fp)
print(newdict)
2. json 序列化
Json 是一个受JavaScript 的对象字面量语法启发的轻量级的数据交换格式 Json 在js语言中是一个对象的表示方法,和Python中的字典的定义规则和语法都很像 Json 在互联网中又是一种通用的数据交换,数据传输,数据定义的一种数据格式
'''
Python中提供的json模块,可以把一些符合转换的Python数据对象,转为json格式的数据
json.dumps()
json.loads()
json.dump()
json.load()
'''
import json
vardist = {'name':'admin','age':20,'sex':'男'}
res = json.dumps(vardist)
print(res,type(res))
res = json.loads(res)
print(res,type(res))
vardist = [{'name':'admin','age':20,'sex':'男'},{'name':'aa','age':21,'sex':'女'}]
with open('./data.json','r') as fp:
new = json.load(fp)
print(new)
二. 数学模块 Math
Python 中的内置数学模块Math,提供了很多的数学相关运算
import math
res = math.ceil(2.25)
print(res)
res = round(2.25)
print(res)
res = math.floor(2.55)
print(res)
res = math.pow(2,3)
print(res)
res = math.sqrt(16)
print(res)
res = math.fabs(-100)
print(res)
res = math.modf(3.1415)
print(res)
res = math.copysign(3.15,-99)
print(res)
res = math.fsum([1,2,3])
print(res)
res = math.factorial(4)
print(res)
print(math.pi)
三. 随机模块 random
import random
res = random.random()
print(res)
res = random.randrange(5)
res = random.randrange(5,10)
res = random.randrange(5,10,2)
print(res)
res = random.randint(5,10)
res = random.uniform(5,10)
res = random.choice('abd')
res = random.choice([1,2,3,4])
arr = [1,2,3,4]
res = random.shuffle(arr)
print(arr)
四. 系统接口模块 os
import os
print(os.getcwd())
print(os.getcwdb())
os.chdir('D:\PyCharm\Code')
print(os.getcwd())
print(os.listdir())
print(os.listdir('D:\PyCharm\Code\Oct19'))
'''
系统中的文件权限,仅限linux系统
第一位 d代表是一个目录,如果是 - 则表示为一个文件
前三位 rwx 代表文件所有人(u)的权限
中间三位 r-x 代表文件所属组(g)的权限
最后三位 r-x 代表其他人(o)的权限
r 是否可读
w 是否可写
x 是否可执行
'''
os.mkdir('aa')
os.makedirs('/PyCharm/Code/Oct19/cest/aa/bb/cc')
os.mkdir('/a')
os.rmdir('/a')
os.removedirs('/PyCharm/Code/Oct19/cest/aa/bb/cc')
os.rename('/PyCharm/Code/Oct19/day2/a','/PyCharm/Code/Oct19/day2/aaa')
os.system('ls')
os.path
import os
res = os.path.abspath('./')
print(res)
res = os.path.basename('/PyCharm/Code/Oct19/day2')
res = os.path.basename('/PyCharm/Code/Oct19/day2/data.txt')
print(res)
res = os.path.dirname('/PyCharm/Code/Oct19/day2/data.txt')
print(res)
res = os.path.join('./a/b/c/','2.jpg')
print(res)
res = os.path.split('./a/bbb/ccc')
print(res)
res = os.path.splitext('./a/b/c/2.jpg')
res = os.path.splitext('./a/b/c/2')
print(res)
res = os.path.getsize('./data.txt')
print(res)
res = os.path.isdir('./data.txt')
res = os.path.isdir('./a/bbb')
print(res)
res = os.path.isfile('./data.txt')
res = os.path.isfile('./a/b/c/2.jpg')
print(res)
res = os.path.exists('./data.json')
print(res)
a = './a/bbb/b.txt'
b = './a/bbb/b.txt'
res = os.path.samefile(a,b)
print(res)
五. 高级文件操作模块 shutil
import shutil
shutil.copy('./data.json','./a/bbb/data1.json')
shutil.copytree('./a','./b')
shutil.rmtree('./b')
shutil.move('./a/bbb/b.txt','./a/bbb/ccc')
shutil.move('./a/bbb/ccc/b.txt','./a/bbb/ccc/rename.txt')
六. 压缩模块 zipfile
import zipfile,os
'''
zipfile.ZipFile(路径包名,模式,压缩或打包)
'''
with zipfile.ZipFile('allfile.zip','w',zipfile.ZIP_DEFLATED) as myall:
arr = os.listdir('../day2')
for i in arr:
print(i)
myall.write('../day2/'+i)
with zipfile.ZipFile('spam.zip','r') as myzip:
myzip.extractall('./aa')
''' 使用shutil模块进行归档压缩 '''
import shutil
shutil.make_archive('b','tar','./')
七. 时间模块 time
import time
'''
概念:
1.时间戳 表示从1970年1月1日0时0分0秒到现在的一个秒数,目前可以计算到2038年
'''
res = time.time()
res = time.ctime()
res = time.localtime()
t = 1567200631.6747496
res = time.ctime(t)
res = time.localtime(t)
print(res)
print(f'{res.tm_year}年{res.tm_mon}月{res.tm_mday}日 {res.tm_hour}时:{res.tm_min}分:{res.tm_sec}秒 星期{res.tm_wday+1}')
res = time.strftime('%Y-%m-%d %H:%M:%S 周%w')
print(res)
t1 = time.perf_counter()
for i in range(10000000):
if 100 > 99:
pass
t2 = time.perf_counter()
print(t2-t1)
八. 日历模块 calendar
import calendar
year = 2022
month = 3
res = calendar.monthrange(year,month)
days = res[1]
w = res[0]+1
print(f'====== {year}年 ====== {month}月 ====')
print(' 一 二 三 四 五 六 日')
print('*'*28)
d = 1
while d <= days:
for i in range(1,8):
if d > days or (d==1 and i<w):
print(' '*2,end=" ")
else:
print(' {:0>2d} '.format(d), end='')
d += 1
print()
print('*'*28)
'''
====== 2022年 ====== 3月 ====
一 二 三 四 五 六 日
****************************
01 02 03 04 05 06
07 08 09 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
****************************
'''
dd = time.localtime()
year = dd.tm_year
month = dd.tm_mon
while True:
os.system('cls')
showdate(year,month)
print('<上一月 下一月>')
c = input('请输入您的选择:< or >')
if c == '<':
month -= 1
if month < 1:
month= 12
year-=1
elif c == '>':
month += 1
if month > 12:
month=1
year+=1
else:
print('输入错误,请重新输入')
|