序列化与反序列化、时间模块、随机值random模块、os模块

序列化与反序列化

1、什么是序列化与反序列化

序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输
反序列化就是硬盘中或者网络中传来的一种数据格式转换成内存中数据结构

2、 为什么要有?

1、可以保存程序的运行状态
2、数据的跨平台交互

 json注意点:

json格式不能识别单引号,全都是双引号

优点:
    跨平台性强
缺点:
    只能支持/对应python部分的数据类型

用json反序列化

with open('db.json','rt',encoding='utf-8') as f:
    l=json.load(f)

    print(l) 

用eval反序列化

with open('db.json','rt',encoding='utf-8') as f:
    s=f.read()  #s='[l,true,null]'
    dic=eval(s)  #eval('[l,true,null]')

    print(dic['name'])

json的反序列化

# 导入模块

import json

反序列化:中间格式json----》内存中的数据类型

1.从文件中读取json_str

with open('db.jsnon','rt',encoding='utf-8') as f:
    json_str=f.read()

2.将json_str转成内存中的数据类型

dic=json.loads(json_str)

将以上1和2步骤合为一步

with open('db.json','rt',encoding='utf-8') as f:

dic=json.load(f)

print(dic['sex'])

 

json的序列化

import json

dic={'name':'egon','age':18,'sex','male'}

序列化:内存中的数据类型----->中间格式json

1.序列化得到json_str

json_str=json.dumps(dic)

2.把json_str写入文件

with open('db.jsnon','wt',encoding='utf-8') as f:

    json.dump(dic,f)

以上两步合为一步

with open('db,json','wt',encoding='utf-8') as f:

json.dump(dic,f)

print(json_str,type(json_str)) # json格式不能识别单引号,全都是双引号

pickle反序列化

import pickle

1.从文件中读取pickle格式

with open('db.pkl','rb') as f:
    pk1=f.read()

2.将json_str转成内存中的数据类型

dic=pickle.loads(pkl)

print(dic['a'])

以上两步可合为一步:

with open ('db.pkl','rb') as f:
    dic=pickle.load(f)

print(dic['a'])

pickle序列化

import pickle

dic={'1':1,'b':2},'c':3

1.序列化

pkl=pickle.dumps(dic)

    print(pkl,type(pkl))

2.写入文件

with open('db.pkl','wb') as f:

    f.write(pkl)

1和2可以合作一步

with open('db.pkl','wb') as f:

    pickle.dump(dic,f)

02 时间模块

import time

时间分为三种格式
1.时间戳

start=time.time()
time.sleep(3)
stop=time.time()
rint(stop - start)

2.格式化的字符串形成

print(time.strftime('%Y-%m-%d %X')) #%Y为年 %m为月 %d日 %X当前时间

print(time.strftime('%Y-%m-%d %H:%M:%S %p') # %H:%M:%S为时 分 秒 %p为AM或者MP

3.结构化的时间/时间对象

t1=time.localtime()
print(t1)
print(type(t1.tm_min))
print(t1.tm_mday)
t2=time.gmtime()
print(t1)
print(t2)

时间转换

# print(time.localtime(123123123))
# print(time.gmtime(123123123))
# print(time.mktime(time.localtime()))
# print(time.strftime('%Y',time.localtime()))
# print(time.strptime('2011-03-07','%Y-%d-%m'))
# print(time.asctime())
# print(time.ctime())
# print(time.strftime('%a %b %d %H:%M:%S %Y'))
# print(time.asctime(time.localtime()))
# print(time.ctime(123123123))
# print(time.strftime('%Y-%m-%d %X'))

问题:
获取格式化字符串形式的时间麻烦
时间戳与格式化时间之间的转换麻烦
获取之前或者未来的时间麻烦

import datetime
# print(datetime.datetime.now()) #当前时间
# print(datetime.datetime.fromtimestamp(1231233213)) #从1970年00:00:00开始偏移(以秒偏移)
# print(datetime.datetime.now() + datetime.timedelta(days=3))  #当前时间为基准向三天后偏移

# print(datetime.datetime.now() + datetime.timedelta(days=-3))  #当前时间为基准向三天前偏移

s=datetime.datetime.now()
print(s.replace(year=2020))

结果:2020-06-20 16:33:58.936918

03 随机值random模块

import random
# print(random.random())
# print(random.randint(1,3))
# print(random.randrange(1,3))
# print(random.choice([1,'egon',[1,2]]))
# print(random.sample([1, 'aa', [4, 5]], 2))
# print(random.uniform(1,3))
# item=['a','b','c','d']
# random.shuffle(item)
# print(item)

04 os模块

import os
# print(os.getcwd()) # 获取当前工作目录,即当前python脚本工作的目录路径
 
# print(os.listdir(r'D:\s2视频目录\day18'))  # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
# print(os.listdir('.'))
# print(os.listdir('..'))
 

# os.chdir(r'D:\s2视频目录\day08') # 返回当前目录: ('.')
# print(os.getcwd())
 

# print(os.listdir(r'D:\s2视频目录\day08'))
# print(os.listdir(r'.'))
 

# os.mkdir(r'a') # 生成单级目录;相当于shell中mkdir dirname
# os.mkdir(r'a/b')
# os.mkdir(r'a/b/c')

# os.makedirs(r'a\b\c\d\e\f') # 可生成多层递归目录
# os.rmdir(r'a\b\c\d\e\f')
# os.removedirs(r'a\b\c\d\e\f')

# obj=os.stat(r'D:\s2视频目录\day18\run.py') # 获取文件/目录信息
# print(obj)
# print(os.sep)
# print(os.linesep)
# print(os.pathsep)

# import time,os
# print(os.getpid())
# time.sleep(500)

# res=os.system('taskliasdfst')
# print('结果是:',res)


# import json
# 当程序所有的文件都需要引用一个变量时,则需要将该变量加入环境变量中
# os.environ['x']=json.dumps(['a','b','c'])
# print(json.loads(os.environ['x'])[0])

# print(os.path.split(r'D:\s2视频目录\day18\03 random模块.py'))
# print(os.path.dirname(r'D:\s2视频目录\day18\03 random模块.py'))
# print(os.path.basename(r'D:\s2视频目录\day18\03 random模块.py'))

# print(os.path.isabs(r'C:\a\b.txt'))
# print(os.path.isabs(r'a\b.txt'))

# print(os.path.isabs('/a/b/c.txt'))
# print(os.path.isabs('a/b/c.txt'))

# print(os.path.join('C:\\','a','D:\\','b','F:\\','c.txt'))

print(os.path.getsize(r'D:\s2视频目录\day18\02 时间模块.py')) #字节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值