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可以存储什么类型的数据呢?
- 所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。
- 由任何原生类型组成的列表,元组,字典和集合。
- 函数,类,类的实例
pickle模块中常用的方法有:
-
pickle.dump(obj, file, protocol=None,)
-
必填参数obj表示将要封装的对象
-
必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb”
-
可选参数protocol表示告知pickler使用的协议,支持的协议有0,1,2,3,默认的协议是添加在Python 3中的协议3。
-
-
pickle.load(file,*,fix_imports=True, encoding="ASCII", errors="strict")
- 必填参数file必须以二进制可读模式打开,即“rb”,其他都为可选参数
-
pickle.dumps(obj):以字节对象形式返回封装的对象,不需要写入文件中
-
pickle.loads(bytes_object): 从字节对象中读取被封装的对象,并返回
pickle模块可能出现三种异常:
-
PickleError:封装和拆封时出现的异常类,继承自Exception
-
PicklingError: 遇到不可封装的对象时出现的异常,继承自PickleError
-
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 可以持久化中文,否则中文无法正常保存
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构