python json、pickle

文章部分转自:https://www.cnblogs.com/lincappu/p/8296078.html

json:用于字符串和Python数据类型间进行转换

pickle: 用于python特有的类型和python的数据类型间进行转换

json提供四个功能:dumps,dump,loads,load

pickle提供四个功能:dumps,dump,loads,load

1. pickle

pickle可以存储什么类型的数据呢?

  1. 所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。
  2. 由任何原生类型组成的列表,元组,字典和集合。
  3. 函数,类,类的实例

pickle模块中常用的方法有:

  1. pickle.dump(obj, file, protocol=None,)

    • 必填参数obj表示将要封装的对象

    • 必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb”

    • 可选参数protocol表示告知pickler使用的协议,支持的协议有0,1,2,3,默认的协议是添加在Python 3中的协议3。   

  2. pickle.load(file,*,fix_imports=True, encoding="ASCII", errors="strict")

    • 必填参数file必须以二进制可读模式打开,即“rb”,其他都为可选参数
  3. pickle.dumps(obj):以字节对象形式返回封装的对象,不需要写入文件中

  4. pickle.loads(bytes_object): 从字节对象中读取被封装的对象,并返回

pickle模块可能出现三种异常:

  1. PickleError:封装和拆封时出现的异常类,继承自Exception

  2. PicklingError: 遇到不可封装的对象时出现的异常,继承自PickleError

  3. UnPicklingError: 拆封对象过程中出现的异常,继承自PickleError

import pickle


data = ['aa', 'bb', 'cc']

# 1. dumps(object) -> string;将数据转成只有python语言认识的字符串
p_str = pickle.dumps(data)
print(p_str)
# b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.

# 2. dump(object, file); 将数据转成pickle的字符串,并写入文件
with open('ak.pk', 'wb') as f:  # file必须以二进制可写模式打开,即“wb”
    pickle.dump(data, f)        # 文件里面存的是pickle的字符串,不是明文数据

    
# 3. load(file) -> object ;从文件读取pickle的字符串并转换成原来的数据格式
with open('ak.pk', 'rb') as f:  # 要以二进制读取打开
    data = pickle.load(f)
    print(data)          # data是明文数据
# ['aa', 'bb', 'cc']


# 4. loads(string) -> object;将pickle字符串转成python数据
mes = pickle.loads(p_str)
print(mes)
# ['aa', 'bb', 'cc']

2. Json

方法和pickle一样,dumps、loads是对 json 字符串的操作,dump、load是对文件的操作

import json


s = {1:'a',2:'b',3:'c'}
# 1. dumps: obj-->string;从数据转成json字符串
ds = json.dumps(s)
print(ds,type(ds))

# 2. dump: obj-->file;从数据写入文件
with open('j','w') as f:
    d = json.dump(s,f)

# 3. loads: string-->obj;从json字符串转成数据
lds = json.loads(ds)
print(lds,type(lds))

# 4. load: file-->obj;从文件读取转成数据
with open('j','r') as f:
    ld = json.load(f)
    print(ld,type(ld))
    
# 5. 持久化中文内容
a = {'1': "中国"}
with open('a.json', 'w', encoding='utf-8') as f:
    json.dump(a, f, indent=4, ensure_ascii=False)  # indent 可以设置格式化缩进。ensure_ascii=False 可以持久化中文,否则中文无法正常保存
posted @ 2019-10-30 16:37  wztshine  阅读(139)  评论(0编辑  收藏  举报