day18:json模块&time模块&zipfile模块
json模块
1.关于json的定义
所有的编程语言都能够识别的数据格式叫做json,是字符串
能够通过json序列化成字符串与如下类型: (int float bool str list tuple dict None)
2.json用法
# 1.dumps和loads是一对,可以序列化字符串
dic = {"name":"Libolun","age":81,"classroom":"python31","family":["老爸","老妈","哥哥"]}
# 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 = {"name":"Libolun","age":81,"classroom":"python31","family":["老爸","老妈","哥哥"]}
with open("ceshi0728.json",mode="w",encoding="utf-8") as fp:
json.dump(dic,fp,ensure_ascii=False) with open("ceshi0728.json",mode="r",encoding="utf-8") as fp:
dic = json.load(fp)
print(dic, type(dic))
3.json和pickle的差别
json:可以连续dump,但是不可以连续load
json的连续dump:
"""json 可以连续dump , 但是不能连续load"""
dic1 = {"a":1,"b":2}
dic2 = {"c":3,"d":4}
with open("0728_2.json",mode="w",encoding="utf-8") as fp:
json.dump(dic1,fp)
fp.write("\n")
json.dump(dic2,fp)
fp.write("\n")
为什么json不可以连续load呢?
原因:load 在获取数据时,是一次性拿取所有内容
错误的示范:
with open("0728_2.json",mode="r",encoding="utf-8") as fp:
res = json.load(fp)
print(res)
'''这样是不可行的,load会一次性把所有数据都拿出来'''
解决办法:(for循环遍历fp文件对象,一个一个loads)
with open("0728_2.json",mode="r",encoding="utf-8") as fp:
for i in fp:
dic = json.loads(i)
print(dic,type(dic))
pickle:可以连续dump 也可以连续load 因为pickle在存储数据的时候会在末尾加上结束符
pickle的连续dump和连续load
"""pickle 可以连续dump 也可以连续load 因为pickle在存储数据的时候会在末尾加上结束符"""
import pickle
dic1 = {"a":1,"b":2}
dic2 = {"c":3,"d":4}
with open("0728_3.pkl",mode="wb") as fp:
pickle.dump(dic1,fp)
pickle.dump(dic2,fp) with open("0728_3.pkl",mode="rb") as fp:
dic1 = pickle.load(fp)
print(dic1 , type(dic1))
dic2 = pickle.load(fp)
print(dic2 , type(dic2))
使用pickle获取文件当中的所有数据
# try ... except ... 异常处理(用来抑制错误的)
"""
try :
可能报错的代码
except:
如果报错执行except这个代码块;
"""
# 获取文件当中所有的数据
try:
with open("0728_3.pkl",mode="rb") as fp:
while True:
res = pickle.load(fp)
print(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 时间模块
import time # localtime -> mktime -> ctime
# 时间元组 -> 时间戳 -> 时间字符串
# time() 获取本地时间戳 (*)
res = time.time()
print(res) # localtime() 获取本地时间元组(参数是时间戳,默认当前) (*)
res = time.localtime()
print(res)
"""
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)
print(res) # mktime() 通过时间元组获取时间戳(参数是时间元组) (*)
ttp = (2020,7,28,10,48,30,0,0,0)
res = time.mktime(ttp)
print(res) # 1595904510 # ctime() 获取本地时间字符串(参数是时间戳,默认当前) (*)
res = time.ctime() # 默认以当前时间戳获取时间字符串
print(res)
# 指定时间戳
res = time.ctime(1595904161)
print(res) # asctime() 通过时间元组获取时间字符串(参数是时间元组)(了解)
ttp = (2020,7,28,10,54,30,6,0,0) # 不能自动识别周几.
res = time.asctime(ttp)
print(res)
# 改造办法
ttp = (2020,7,28,10,54,30,0,0,0)
res = time.mktime(ttp)
str_time = time.ctime(res)
print(str_time) # sleep() 程序睡眠等待 (*)
"""
time.sleep(2)
print("我睡醒了")
""" """
strftime => 把时间元组 -> 时间字符串
strptime => 把时间字符串 -> 时间元组
"""
# strftime() 格式化时间字符串(格式化字符串,时间元祖) (*)
# 1.默认按照当前时间做格式化
res = time.strftime("%Y-%m-%d %H:%M:%S")
print(res)
# 2.指定时间元组,对时间字符串格式化
"""strftime如果在windows当中出现中文,直接报错,不能解析,linux 可以支持"""
ttp = (2000,10,1,12,12,12,0,0,0)
res = time.strftime("%Y-%m-%d %H:%M:%S" , ttp)
print(res) # strptime() 将时间字符串通过指定格式提取到时间元组中(时间字符串,格式化字符串) (*)
"""要求字符串不能乱加符号,必须严丝合缝."""
strvar = "2020年7月28号11时12分13秒是著名歌星庾澄庆的生日"
ttp = time.strptime(strvar,"%Y年%m月%d号%H时%M分%S秒是著名歌星庾澄庆的生日")
print(ttp) # perf_counter() 用于计算程序运行的时间 (了解)
# 记录开始时间
# startime = time.perf_counter()
startime = time.time()
for i in range(100000000):
pass
# 记录结束时间
# endtime = time.perf_counter()
endtime = time.time()
print(endtime - startime)
用time模块实现动态进度条
进度条准备工作
import time # (1) 定义进度条的样式
'''%-50s让#号居左显示且占50个空位'''
print("[%-50s]" % ("#"))
print("[%-50s]" % ("###############"))
print("[%-50s]" % ("#########################")) # (2) 让进度条动起来 strvar = ""
for i in range(50):
strvar += "#"
time.sleep(0.1)
print("\r[%-50s]" % (strvar) , end="" ) # \r的作用:将后面的字符直接拉到当前行行首
实现一个动态的进度条
# (3) 根据文件的大小,调整进度条的位置
# 假设文件的大小是 1024000
def progress(percent):
# 如果百分比超过了1,说明数据已经接受完毕;
if percent > 1:
percent = 1 # 打印对应的#号效果
strvar = "#" * int(percent * 50)
# %% => %
print("\r[%-50s] %d%%" % (strvar,int(percent * 100)) , end="" ) # 初始化接受的字节数
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 压缩模块
import zipfile # 1.压缩文件
# (1) 创建压缩包
zf = zipfile.ZipFile("1424.zip","w",zipfile.ZIP_DEFLATED)
# (2) 把文件写入到压缩包中
# write(路径,别名)
zf.write("/bin/cp","cp")
zf.write("bin/chmod","chmod")
# 可以临时创建一个文件夹在tmp在压缩包中
zf.write("/bin/df","/tmp/df")
# (3) 关闭压缩包
zf.close() # 2.解压文件
# (1) 打开压缩包
zf = zipfile.ZipFile("1424.zip","r")
# (2) 解压文件
# 解压单个文件
zf.extract("cp","ceshi1424_2")
# 解压所有文件
zf.extractall("ceshi1424")
# (3) 关闭压缩包
zf.close() # 3.追加文件(支持with语法)
with zipfile.ZipFile("1424.zip","a",zipfile.ZIP_DEFLATED) as zf:
zf.write("/bin/dir","dir") # 4.查看压缩包
with zipfile.ZipFile("1424.zip","r",zipfile.ZIP_DEFLATED) as zf:
lst = zf.namelist()
print(lst)
day18:json模块&time模块&zipfile模块的更多相关文章
- day 5 模块导入、常用模块os shutil sys commands subprocess hashlib json pickle zipfile traceback random datetime
os: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os. ...
- day17.json模块、时间模块、zipfile模块、tarfile模块
一.json模块 """ 所有的编程语言都能够识别的数据格式叫做json,是字符串 能够通过json序列化成字符串与如下类型: (int float bool str l ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- python笔记之ZipFile模块
python笔记之ZipFile模块 zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下, ...
- os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法
一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...
- 如何编写package.json配置NodeJS项目的模块声明
在NodeJS项目中,用package.json文件来声明项目中使用的模块,这样在新的环境部署时,只要在package.json文件所在的目录执行 npm install 命令即可安装所需要的模块. ...
- zipfile模块
在python中操作zip文件, 基本上都是使用zipfile模块,他可以创建.解压文件,获取zip文件的元数据信息. 我们想要操作一个zip文件,第一步就是初始化ZipFile实例. 1.打开tes ...
- Python之路(第十八篇)shutil 模块、zipfile模块、configparser模块
一.shutil 模块 1.shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中,需要打开文件 import shutil shutil.co ...
- Python ZipFile模块详解(转)
Python zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个cl ...
- Python标准库学习之zipfile模块
ZipFile模块里有两个非常重要的class, 分别是 ZipFile和ZipInfo. ZipFile是主要的类,用来创建和读取zip文件,而ZipInfo是存储的zip文件的每个文件的信息的. ...
随机推荐
- C语言初级阶段7——指针3
C语言初级阶段7--指针3 指针数组:描述的是一个数组,存储的是指针 #include<stdio.h> void fun(int(*arr)[2]) { for (int i = 0; ...
- w10 端口转发
场景:同局域网,将其他电脑监听映射到本地.(由于各种安全设计的定点通信) 1.添加端口转发netsh interface portproxy add v4tov4 listenport=4000 li ...
- virtualvm2 观察者模式
<template> <div id="app"> <input type="text" v-model='msg'> &l ...
- NOIP2010普及组
T2]接水问题 有一些小细节,比如如果最小值存在多个,比如最后还需要一个完全结束的最大值 #include<iostream> #include<cstring> #inclu ...
- sqlite bundle 的含义,和 sqlite.dll, SQLite.Interop.dll, System.Data.SQLite.dll 三者之间的关系
sqlite bundle 的含义,和 sqlite.dll, SQLite.Interop.dll, System.Data.SQLite.dll 三者之间的关系. bundle 表示不需要配合 S ...
- sql server 连接 EXCEL 直接查询
1 SQL SERVER 中 查看有无访问接口,以下其中任何一个即可. 没有则下载 Microsoft Access Database Engine 2016 Redistributable (M ...
- ant build 报 warning modified in the future
错误原因:在测试项目时,修改了系统时间,之后保存了文件,再将系统时间改回来,会报这个错误 解决方法:复制改过的文件到记事本,然后回退下文件,再将记事本的内容覆盖下文件,重新build下就可以了.
- LeedCode 85. 最大矩形(/)
原题解 题目 约束 题解 解法一 class Solution { public: int maximalRectangle(vector<vector<char>>& ...
- pymysql安装后使用报错处理
1.django启动报错: Error loading MySQLdb module. Did you install mysqlclient? 原因:初次安装配置pymysql时需要在__init_ ...
- 西电oj245 成绩统计 结构体数组使用
#include<stdio.h> struct student{ //定义一个结构体数组 int num; char name[11]; float g1; float g2; floa ...