加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

day18:json模块&time模块&zipfile模块

发布时间:2020-12-20 09:56:43 所属栏目:Python 来源:网络整理
导读:json模块 1.关于json的定义 所有的编程语言 都能够识别的数据格式叫做json,是 字符串 能够通过json序列化成字符串与如下类型: (int float bool str list tuple dict None) 2.json用法 # 1. dumps和loads是一对,可以序列化字符串 dic = { " name " : "Libolun

json模块

1.关于json的定义

所有的编程语言都能够识别的数据格式叫做json,是字符串
能够通过json序列化成字符串与如下类型: (int float bool str list tuple dict None)

2.json用法

# 1.dumps和loads是一对,可以序列化字符串
dic = {"name":"Libolun",age":81,1)">classroompython31family":[老爸老妈"哥哥"]}
# ensure_ascii=False 显示中文 sort_keys=True 对字典的键进行排序
res = json.dumps(dic,ensure_ascii=False,sort_keys=True)
print(res,type(res))

 loads反序列化原来的数据类型
dic = json.loads(res)
print(dic,type(dic))
 2.dump 和 load 是一对,针对于文件,把数据序列化后存储文件
dic = {]}
with open(ceshi0728.jsonwutf-8) as fp:
    json.dump(dic,fp,ensure_ascii=False)

with open(r) as fp:
    dic = json.load(fp)
    json:可以连续dump,但是不可以连续load

json的连续dump:

"""json 可以连续dump,但是不能连续load"""
dic1 = {a":1,1)">b":2}
dic2 = {c":3,1)">d":4}
with open(0728_2.json) as fp:
    json.dump(dic1,fp)
    fp.write(n)
    json.dump(dic2,1)">")

为什么json不可以连续load呢?

原因:load 在获取数据时,1)">一次性拿取所有内容

错误的示范:

with open() as fp:
    res =(res)
'''这样是不可行的,load会一次性把所有数据都拿出来'''

解决办法:(for循环遍历fp文件对象,一个一个loads)

with open() as fp:
    for i in fp:
        dic = json.loads(i)
        pickle:可以连续dump 也可以连续load 因为pickle在存储数据的时候会在末尾加上结束符

pickle的连续dump和连续load

pickle 可以连续dump 也可以连续load 因为pickle在存储数据的时候会在末尾加上结束符"""
import pickle
dic1 = {0728_3.pklwb) as fp:
    pickle.dump(dic1,fp)
    pickle.dump(dic2,fp)

with open(rb) as fp:
    dic1 = pickle.load(fp)
    (dic1,type(dic1))
    dic2 =print(dic2,type(dic2))

使用pickle获取文件当中的所有数据

 try ... except ... 异常处理(用来抑制错误的)

try :
    可能报错的代码
except:
    如果报错执行except这个代码块;
 获取文件当中所有的数据
try:
    with open() as fp:
        while True:
            res = pickle.load(fp)
            (res)
except:
    pass

json和pickle两个模块的区别

1.json序列化之后的数据类型是str,所有编程语言都识别,
但是仅限于(int float bool)(str list tuple dict None)
json不能连续load,只能一次性拿出所有数据
2.pickle序列化之后的数据类型是bytes,
所有数据类型都可转化,但仅限于python之间的存储传输.
pickle可以连续load,多套数据放到同一个文件中
3.json使用的广泛性比pickle更强.

time模块

time:时间戳

localtime:时间戳转化成时间元组

mktime:时间元组转化成时间戳

ctime:时间戳转化为时间字符串

strftime:时间元组转化为时间字符串

strptime:时间字符串转化为时间元组

 ### time 时间模块
 time

  localtime -> mktime -> ctime
#  时间元组 -> 时间戳 -> 时间字符串

time() 获取本地时间戳 (*) res = time.time() (res) localtime() 获取本地时间元组(参数是时间戳,默认当前) (*) res = time.localtime() time.struct_time( tm_year=2020,tm_mon=7,tm_mday=28,tm_hour=10,tm_min=45,tm_sec=9,tm_wday=1,tm_yday=210,tm_isdst=0 ) 指定时间戳,返回时间元组 ttp = 1595904161 res = time.localtime(ttp) mktime() 通过时间元组获取时间戳(参数是时间元组) (*) ttp = (2020,7,28,10,48,30,0) res = time.mktime(ttp) print(res) 1595904510 ctime() 获取本地时间字符串(参数是时间戳,默认当前) (*) res = time.ctime() 默认以当前时间戳获取时间字符串 指定时间戳 res = time.ctime(1595904161) asctime() 通过时间元组获取时间字符串(参数是时间元组)(了解) ttp = (2020,54,30,6,0) 不能自动识别周几. res = time.asctime(ttp) 改造办法 ttp = (2020,1)"> time.mktime(ttp) str_time = time.ctime(res) (str_time) sleep() 程序睡眠等待 (*) time.sleep(2) print("我睡醒了") """ strftime => 把时间元组 -> 时间字符串 strptime => 把时间字符串 -> 时间元组 strftime() 格式化时间字符串(格式化字符串,时间元祖) (*) 1.默认按照当前时间做格式化 res = time.strftime(%Y-%m-%d %H:%M:%S 2.指定时间元组,对时间字符串格式化 strftime如果在windows当中出现中文,直接报错,不能解析,linux 可以支持 ttp = (2000,1,12,12(res) strptime() 将时间字符串通过指定格式提取到时间元组中(时间字符串,格式化字符串) (*) 要求字符串不能乱加符号,必须严丝合缝. strvar = 2020年7月28号11时12分13秒是著名歌星庾澄庆的生日 ttp = time.strptime(strvar,1)">%Y年%m月%d号%H时%M分%S秒是著名歌星庾澄庆的生日(ttp) perf_counter() 用于计算程序运行的时间 (了解) 记录开始时间 startime = time.perf_counter() startime =in range(100000000): pass 记录结束时间 endtime = time.perf_counter() endtime =print(endtime - startime)

用time模块实现动态进度条

进度条准备工作

 (1) 定义进度条的样式
%-50s让#号居左显示且占50个空位'''
print([%-50s]" % (#))
########################################))

 (2) 让进度条动起来

strvar = ""
in range(50):
    strvar += 
    time.sleep(0.1)
    r[%-50s]" % (strvar),end="" )  r的作用:将后面的字符直接拉到当前行行首

实现一个动态的进度条

 (3) 根据文件的大小,调整进度条的位置 假设文件的大小是 1024000
def progress(percent):    
     如果百分比超过了1,说明数据已经接受完毕;
    if percent > 1:
        percent = 1
    
     打印对应的#号效果
    strvar = " * int(percent * 50) 
     %% => %
    r[%-50s] %d%%" % (strvar,int(percent * 100)),1)">"" )

 初始化接受的字节数
recv_size = 0
 文件接受总大小 
total_size = 1024000
while recv_size < total_size:
    recv_size += 1024
     模拟延迟
    time.sleep(0.01 计算百分比
    percent = recv_size/total_size 0.001
     调用进度条函数
    progress(percent)

zipfile模块

 ### zipfile 压缩模块
 zipfile

 1.压缩文件 (1) 创建压缩包
zf = zipfile.ZipFile(1424.zip (2) 把文件写入到压缩包中 write(路径,别名)
zf.write(/bin/cpcp)
zf.write(bin/chmodchmod 可以临时创建一个文件夹在tmp在压缩包中
zf.write(/bin/df/tmp/df (3) 关闭压缩包
zf.close()

 2.解压文件 (1) 打开压缩包
zf = zipfile.ZipFile( (2) 解压文件 解压单个文件
zf.extract(ceshi1424_2 解压所有文件
zf.extractall(ceshi1424 3.追加文件(支持with语法)
with zipfile.ZipFile(/bin/dirdir)

 4.查看压缩包
with zipfile.ZipFile( zf.namelist()
    print(lst)

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读