day18-序列化与反序列化、时间模块、随机值random模块、os模块(含上节课复习)

上节课复习
1.包
    什么是包:包就是一个含有__init__.py文件的文件夹
    包是模块的一种形式,即包是用来被导入的,但包的本质就是一个文件夹(文件夹的作用就是用来存放文件的,包内所有的文件都是用来被导入使用的)
    import 包
    包.名字

    导入方式:
        1.绝对导入:相对于执行文件所在的文件夹
        2.相对导入:相对于当前被导入的文件(只能用于模块直接的互相导入)
            .(单点为模块所在的当前文件路径)
            ..(双点为模块的上级文件路径)
2.日志模块logging

    1.logging:产生日志
    2.filter:筛选过滤日志
    3.handler:接收logger对象传过来的日志,控制输出到不同的位置

    4.formatter:控制handler对象输出的日志的格式

    logging的一个levelname:
        等级名称        日志等级
          debug             10
            info               20
          warning           30
            error              40

           critical            50

01 序列化与反序列化

json注意点:

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

用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()

print(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')) #字节

猜你喜欢

转载自blog.csdn.net/qq_17513503/article/details/80746039