Python怎么实现数据序列化

其他教程   发布日期:2025年01月25日   浏览次数:239

这篇文章主要介绍“Python怎么实现数据序列化”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么实现数据序列化”文章能帮助大家解决问题。

在日常开发中,对数据进行序列化和反序列化是常见的数据操作,Python提供了两个模块方便开发者实现数据的序列化操作,即 json 模块和 pickle 模块。这两个模块主要区别如下:

  • json 是一个文本序列化格式,而 pickle 是一个二进制序列化格式;

  • json 是我们可以直观阅读的,而 pickle 不可以;

  • json 是可互操作的,在 Python 系统之外广泛使用,而 pickle 则是 Python 专用的;

  • 默认情况下,json 只能表示 Python 内置类型的子集,不能表示自定义的类;但 pickle 可以表示大量的 Python 数据类型。

Json 模块

Json 是一种轻量级的数据交换格式,由于其具有传输数据量小、数据格式易解析等特点,它被广泛应用于各系统之间的交互操作,作为一种数据格式传递数据。它包含多个常用函数,具体如下:

dumps()函数

dumps()函数可以将 Python 对象编码成 Json 字符串。例如:

  1. #字典转成json字符串 加上ensure_ascii=False以后,可以识别中文, indent=4是间隔4个空格显示
  2. import json
  3. d={'小明':{'sex':'男','addr':'上海','age':26},'小红':{ 'sex':'女','addr':'上海', 'age':24},}
  4. print(json.dumps(d,ensure_ascii=False,indent=4))
  5. #执行结果:
  6. {
  7. "小明": {
  8. "sex": "男",
  9. "addr": "上海",
  10. "age": 26
  11. },
  12. "小红": {
  13. "sex": "女",
  14. "addr": "上海",
  15. "age": 24
  16. }
  17. }

dump()函数

dump()函数可以将 Python对象编码成 json 字符串,自动写入到文件中,不需要再单独写文件。例如:

  1. #字典转成json字符串,不需要写文件,自动转成的json字符串写入到‘users.json’的文件中
  2. import json
  3. d={'小明':{'sex':'男','addr':'上海','age':26},'小红':{ 'sex':'女','addr':'上海', 'age':24},}
  4. #打开一个名字为‘users.json’的空文件
  5. fw =open('users.json','w',encoding='utf-8')
  6. json.dump(d,fw,ensure_ascii=False,indent=4)

loads()函数

loads()函数可以将 json 字符串转换成 Python 的数据类型。例如:

  1. #这是users.json文件中的内容
  2. {
  3. "小明":{
  4. "sex":"男",
  5. "addr":"上海",
  6. "age":26
  7. },
  8. "小红":{
  9. "sex":"女",
  10. "addr":"上海",
  11. "age":24
  12. }
  13. }
  14. #!/usr/bin/python3
  15. #把json串变成python的数据类型
  16. import json
  17. #打开‘users.json’的json文件
  18. f =open('users.json','r',encoding='utf-8')
  19. #读文件
  20. res=f.read()
  21. print(json.loads(res))
  22. #执行结果:
  23. {'小明': {'sex': '男', 'addr': '上海', 'age': 26}, '小红': {'sex': '女', 'addr': '上海', 'age': 24}}

load()函数

load()跟loads()功能相似,load()函数可以将 json 字符串转换成 Python 数据类型,不同的是前者的参数是一个文件对象,不需要再单独读此文件。例如:

  1. #把json串变成python的数据类型:字典,传一个文件对象,不需要再单独读文件
  2. import json
  3. #打开文件
  4. f =open('users.json','r',encoding='utf-8')
  5. print(json.load(f))
  6. #执行结果:
  7. {'小明': {'sex': '男', 'addr': '上海', 'age': 26}, '小红': {'sex': '女', 'addr': '上海', 'age': 24}}

Pickle 模块

Pickle 模块与 Json 模块功能相似,也包含四个函数,即 dump()、dumps()、loads() 和 load(),它们的主要区别如下:

dumps 和 dump 的区别在于前者是将对象序列化,而后者是将对象序列化并保存到文件中。

loads 和 load 的区别在于前者是将序列化的字符串反序列化,而后者是将序列化的字符串从文件读取并反序列化。

dumps()函数

dumps()函数可以将数据通过特殊的形式转换为只有python语言认识的字符串,例如:

  1. import pickle
  2. # dumps功能
  3. import pickle
  4. data = ['A', 'B', 'C','D']
  5. print(pickle.dumps(data))
  6. b'x80x03]qx00(Xx01x00x00x00Aqx01Xx01x00x00x00Bqx02Xx01x00x00x00Cqx03Xx01x00x00x00Dqx04e.'

dump()函数

dump()函数可以将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件。例如:

  1. # dump功能
  2. with open('test.txt', 'wb') as f:
  3. pickle.dump(data, f)
  4. print('写入成功')
  5. 写入成功

loads()函数

loads()函数可以将pickle数据转换为python的数据结构。例如:

  1. # loads功能
  2. msg = pickle.loads(datastr)
  3. print(msg)
  4. ['A', 'B', 'C', 'D']

load()函数

load()函数可以从数据文件中读取数据,并转换为python的数据结构。例如:

  1. # load功能
  2. with open('test.txt', 'rb') as f:
  3. data = pickle.load(f)
  4. print(data)
  5. ['A', 'B', 'C', 'D']

以上就是Python怎么实现数据序列化的详细内容,更多关于Python怎么实现数据序列化的资料请关注九品源码其它相关文章!