python 20 json 和 pickle

本文介绍了Python中的序列化与反序列化,重点关注json和pickle模块。json模块适用于跨语言数据交换,可将Python对象转换为JSON字符串,然后写入文件或在网络上传输。pickle模块则用于Python内部的序列化,将对象转化为字节,但不适用于其他语言。文中还展示了如何使用这两个模块进行序列化和反序列化操作。
摘要由CSDN通过智能技术生成

目录

json 模块

pickle 模块


json 模块

    用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,
    但遇到特殊类型的时候,eval就不管用了,所以eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值。

序列化 和 反序列号

    把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
    反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

json
    如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,
    比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。
    JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

 

import json

dic = {'name': 'xu', "age": 18}
dic_json = json.dumps(dic)
print(type(dic_json))  # <class 'str'>
# 注意: json序列号后,所有的 单引号 变成 双引号
print(dic_json)  # {"name": "xu", "age": 18}

# 将序列化后的字符串写入文件
with open("json_file", "w") as wirte_f:
    wirte_f.write(dic_json)   #-------------------等价于json.dump(dic, wirte_f)


# 将文件中的内容读取出来并反序列化
with open("json_file", "r") as read_f:
    dic_str = read_f.read()
print(dic_str)

dic = json.loads(dic_str)  # {"name": "xu", "age": 18}   #-------------------等价于 dic = json.dump(dic, read_f)
print(dic["name"])  # xu

pickle 模块

Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python

import pickle

dic = {'name': 'xu', "age": 18}
dic_bytes = pickle.dumps(dic)
print(type(dic_bytes))  # <class 'bytes'>
print(dic_bytes)  # b'\x80\x04\x95\x19\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x02xu\x94\x8c\x03age\x94K\x12u.'

# 将 pickle 序列号的对象写入文件
with open("pickle_json", "wb") as write_f:
    write_f.write(dic_bytes)  #------------------- 等价于pickle.dump(dic,write_f)


# 从 pickle_json 文件中读取内容反序列化
with open("pickle_json", "rb") as read_f:
    dic_bytes = read_f.read()

dic = pickle.loads(dic_bytes) #------------------- 等价于data=pickle.load(read_f)
print(dic["name"])  # xu

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值