您的位置:首页 > 编程语言 > Python开发

Python_内置方法、序列化模块及进度条效果实现

2020-06-04 08:35 225 查看
1.常见的内置方法的作用:
abs()\round()\sum()\max()\sorted()\min()\pow()\range()\bin()
\oct()\hex()\chr()\ord()\eval()\exec()\repr()\input()\hash()
# round(),四舍五入,奇进偶不进,注意有两位小数的情况
# 如何使用sorted找出最大值和最小值,sorted(iterable,key=函数),max及min用法同sorted
# pow()出现第三个参数的作用是什么?
# 谨慎使用eval、exec的原因
# hash的两个用法:1.密码加密 2.文件校验
strvar1 = "abcdef"
strvar2 = "abcdef"
print(hash(strvar1))
print(hash(strvar2))

with open("ceshi1.txt",mode='r',encoding='utf-8') as fp:
strvar = fp.read()
res1 = hash(strvar)

with open("ceshi2.txt",mode='r',encoding='utf-8') as fp:
strvar = fp.read()
res2 = hash(strvar)
print(res1,res2)
2.序列化模块_pickle的用法(数据类型-->字节流)
2.1 什么是序列化?反序列化?
说白了就是翻译吧。文件中存储的数据要么是字符串,要么是字节流,你给它别的它也不懂。
2.2 python中,是通过什么方法来进行所有数据类型的序列化和反序列化的呢?
导入pickle,然后用dumps()---bytes---loads(),这哥俩很强,可以转化任意对象,列表、迭代器、函数什么的爱谁谁。
2.3 dump() 、load(),如果要跟文件打交道,尽量使用dump和load

dic = {"a":1,"b":2}
with open("ceshi3.txt",mode='wb') as fp:
# dump(要转换的对象,文件对象),把对象序列化后写入文件对象
pickle.dump(dic,fp)

with open("ceshi3.txt",mode='rb') as fp:
res = pickle.load(fp)	# 把文件对象里的内容拿出来,反序列化成原来数据

print(res,type(res))

2.4 dumps()  vs  dump()
# dumps需要先将对象转为字节流,再去执行写入操作,dump直接就是跟文件对象打交道了,比dumps更简便一些

dic = {"a":1,"b":2}
str_bytes = pickle.dumps(dic)
print(str_bytes)
with open("ceshi4.txt",mode="wb") as fp:
fp.write(str_bytes)

# 通过loads来取出
with open("ceshi4.txt",mode="rb") as fp:
str_bytes = fp.read()
dic = pickle.loads(str_bytes)

print(dic,type(dic))
3.json模块的使用(数据类型-->字符串)
所有的编程语言都能识别的数据格式叫做json,是字符串
3.1 能够通过json序列化成字符串的有如下类型:8种
int\float\bool\str\list\tuple\dict\None
4.json的用法
4.1 dumps 和 loads,序列化成字符串
dic = {"name":"王","age":30,"classroom":"python30","family":["baba","mma","bro","sis"]}
# ensure_ascii 和 sort_keys的效果是什么
res = json.dumps(dic,ensure_ascii=False,sort_keys=True)
print(res)

# loads反序列化成原来的数据类型
dic = json.loads(res)
print(dic,type(dic))

4.2 dump 和 load,针对于文件,把数据进行序列化操作
dic = {"name":"王","age":30,"classroom":"python30","family":["baba","mma","bro","sis"]}
with open("ceshi5.json",mode="w",encoding="utf-8") as fp:
# dump(要转换的数据,文件对象)
json.dump(dic,fp,ensure_ascii=False)

# load反序列化成原来的数据类型
with open("ceshi5.json",mode="r",encoding="utf-8") as fp:
dic = json.load(fp)

print(dic, type(dic))
5.json 和 pickle 两个模块的区别
(1)json序列化之后的数据类型是str,所有编程语言都识别,(数据交流)
但是仅限于(int float bool)(str list tuple dict None)
json不能连续load,只能一次性拿出所有数据
(2)pickle序列化之后的数据类型是bytes, (存储转换)
所有数据类型都可转化,但仅限于python之间的存储传输.
pickle可以连续load,多套数据放到同一个文件中

dic1 = {"a":1,"b":2}
dic2 = {"c":3,"d":4}
with open("ceshi6.json",mode="w",encoding="utf-8") as fp:
json.dump(dic1,fp)
fp.write("\n")
json.dump(dic2,fp)
fp.write("\n")

# with open("ceshi6.json",mode="r",encoding="utf-8") as fp:
#dic = json.load(fp)
#print(dic)

with open("ceshi6.json",mode="r",encoding="utf-8") as fp:
#文件对象是迭代器,一次迭代一行
for i in fp:
dic  = json.loads(i)
print(dic)

# pickle
import pickle
dic1 = {"a":1,"b":2}
dic2 = {"c":3,"d":4}

with open("ceshi7.pkl",mode="wb") as fp:
pickle.dump(dic1,fp)
pickle.dump(dic2,fp)

# 方法一
with open("ceshi7.pkl",mode="rb") as fp:
dic = pickle.load(fp)
print(dic)
dic = pickle.load(fp)
print(dic)

# 方法二
try:
with open("ceshi7.pkl",mode="rb") as fp:
while True:
dic = pickle.load(fp)
print(dic)
except:
pass
6.time模块,睡眠等待
def progress(percent):
if percent > 1:
percent = 1

# 打印出对应的# 号效果
strvar = int(50 * percent) * "#"
# %% => %号的符号效果
print("\r[%-50s] %d%%" % (strvar , int(100 * percent)) ,end="")

recv_size = 0
# 假设文件总大小是 1028000
total_size = 1028000
while recv_size < total_size:
time.sleep(0.01)

# 一次接受的字节数是1024
recv_size += 1024
percent = recv_size/total_size
progress(percent)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: