python学习第二十四章

主要内容:

1.序列化模块.

json

pickle

shelve(了解)

序列化模块:

  为了把数据用于网络传输,

  以及文件的读写操作.

    序列化: 将数据转化成序列化字符串.

    反序列化: 将序列化字符串转化成原数据.

扫描二维码关注公众号,回复: 1895055 查看本文章

序列化模块:序列化是创造一个序列.

如何把一个字典传给其他人,依赖之前的知识也可以做到,参考如下:

dic = {"a":123,"b":456}
s = str(dic)
p = eval(s)
print(p,type(p))
print(p["a"])

因为eval可能存在安全性问题,所有不建议用eval.这里就要用到json了.

json:

优点:
  # 适用于不同语言之间的,
  # 但是可支持的数据类型:字符串,数字,列表,字典 bool。

pickle:

优点:

  只用于python语言之间的.

  可支持python所有的数据类型.

  shelve(了解):只是python,小工具(文件方面).

# json:
# 数据通过网络发送给别人. json
# 写入文件 也用到json.

序列化过程:一个数据类型---->序列化的字符串

反序列化过程:序列化的字符串 ---> 它所对应的数据类型.

json有两对方法:

dumps loads

dump load

# 被json序列化的字符串:
#1,可以直接通过网络互相传输.
#2,可以在各个语言中通用.

示例:

import json
dic ={"教室":"python","办公室":"老师"}
s = json.dumps(dic)
print(s)
p = json.loads(s)
print(p)

这里需要注意的是json.dump和json.load的问题

json.load只能读取一次jsondump写的内容,如果json.dump对一个文件写了两次,就会报错.如下:

import json
dic = {"a":123,"b":"老师"}
with open("1.txt",mode="w",encoding="utf-8") as f :
    json.dump(dic,f)
    json.dump(dic, f)

with open("1.txt", mode="r", encoding="utf-8") as f:
    s = json.load(f)
    print(s)

如何修正这个问题呢?可以用json.dumps来解决.

如下:

import json
dic = {"a":123,"b":"老师"}
with open("1.txt",mode="w",encoding="utf-8") as f :
    s = json.dumps(dic)
    f.write(s+"\n")
    f.write(s + "\n")
    f.write(s + "\n")
    f.write(s + "\n")
    f.write(s + "\n")
    f.write(s + "\n")
    f.write(s + "\n")
    f.write(s + "\n")



with open("1.txt", mode="r", encoding="utf-8") as f:
    for line in f:
        s = json.loads(line)
        print(s)

 其他参数:

示例:

import json
data = {'username':['李华','二愣子'],'sex':'male','age':16,'A':666}
json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=('|','*'),ensure_ascii=False)
print(json_dic2)

这里面要注意的是:

sort_keys 是指按key来排序,字母是按照ASCII码来排序的
indent 是指打印出来后往左偏移的量
separators 是指字典中的:和,用什么来替换.
ensure_ascii=False 显示中文

pickle 序列化模块

python语言网络交互使用的,他支持所有的python数据类型.

这个和json一样有两对方法
dumps和loads,dump和load
dumps和loads方法和json没有太大的区别,
示例:
import pickle
tu1 = (1,2,4)
s = pickle.dumps(tu1)
p = pickle.loads(s)
print(p)
 

但是dump和load是有区别的.而且还比较大

pickle.dump()可以多几次写入文件,而且pickle也可以通过pickle.load来获取,但是

pickle.load一次只能获取一次,所以可以通过异常处理来解决

示例:

import pickle
tu1 = (1,2,4)
with open("1.txt",mode="wb") as f:
    s = pickle.dump(tu1,f)
    s = pickle.dump(tu1,f)
    s = pickle.dump(tu1,f)
    s = pickle.dump(tu1,f)
    s = pickle.dump(tu1,f)
with open("1.txt",mode="rb") as f :
    while 1 :
        try :
            p = pickle.load(f)
            print(p)
        except  EOFError:
            break



猜你喜欢

转载自www.cnblogs.com/ahliucong/p/9270092.html
今日推荐