Python数据序列化和固化存储的方式

 更新时间:2026年03月06日 09:42:39   作者:TomDeng66  
数据序列化就是把内存中的数据结构(如列表、字典、对象) 转换成可以存储(如写入文件)或传输(如网络发送)的格式,本文给大家介绍Python数据序列化和固化存储的相关知识,感兴趣的朋友跟随小编一起看看吧

数据序列化就是把内存中的数据结构(如列表、字典、对象) 转换成可以存储(如写入文件)或传输(如网络发送)的格式;反序列化则是把这个格式还原回原来的数据结构。

在python中常见的序列化方式有:JSON、pickle

JSON 序列化

JSON 是跨语言的轻量级格式,适合和其他语言(如 Java、JavaScript)交互,但仅支持 Python 的基础数据类型:strintfloatlistdictboolNone

核心函数

  • json.dumps():把数据结构转换成 JSON 字符串(内存中)
  • json.dump():把数据结构直接写入文件(序列化到文件)
  • json.loads():把 JSON 字符串还原成 Python 数据结构(反序列化)
  • json.load():从文件读取 JSON 并还原(反序列化)

json.dumps()

import json
d1 = {'name':'Tomdeng','age':18}
# dict --> json
d1_str = json.dumps(d1)
print(d1) # {'name': 'Tomdeng', 'age': 18}
print(d1_str)  # {"name": "Tomdeng", "age": 18}
print(type(d1_str))  <class 'str'>

json.dump()

import json
d1 = {'name':'Tomdeng','age':18}
f = open("json_test.txt","w+")
json.dump(d1,f)
f.seek(0)
print(f.read())  # {"name": "Tomdeng", "age": 18}
f.close()

json.loads()

import json
d1_str = '{"name":"Tomdeng","age":18}'
d1 = json.loads(d1_str)
print(d1_str) # {"name":"Tomdeng","age":18}
print(d1) # {'name': 'Tomdeng', 'age': 18}
print(type(d1))  # <class 'dict'>

json.load()

import json
f = open("json_test.txt","r")
d1 = json.load(f)
print(d1)   # {'name': 'Tomdeng', 'age': 18}
print(type(d1))  #  <class 'dict'>
f.close()

注意:

  • JSON 的键必须是字符串,Python 字典的非字符串键会被自动转成字符串;
  • 不支持 Python 的自定义对象、tuple(会被转成列表)、set等类型。

pickle 序列化

pickle 是 Python 特有的序列化方式,支持所有 Python 数据类型(包括自定义对象、函数、类),但无法跨语言使用,且序列化后的是二进制数据。

核心函数

  • pickle.dumps():转成二进制字符串
  • pickle.dump():写入文件(二进制模式)
  • pickle.loads():还原二进制字符串
  • pickle.load():从二进制文件还原

pickle.dumps()

import pickle
d1 = {'name':'Tomdeng','age':18}
d1_binary = pickle.dumps(d1)
print(type(d1_binary))

pickle.dump()

import pickle
d1 = {'name':'Tomdeng','age':18}
f = open("pickle_test","wb")
pickle.dump(d1,f)
f.close()

pickle.loads()

import pickle
d1 = {'name':'Tomdeng','age':18}
d1_binary = pickle.dumps(d1)
d2 = pickle.loads(d1_binary)
print(d2)  # {'name': 'Tomdeng', 'age': 18}
print(type(d2))  #  <class 'dict'>

pickle.load()

import pickle
f= open("pickle_test","rb")
d1 = pickle.load(f) 
print(d1)   # {'name': 'Tomdeng', 'age': 18}
print(type(d1))  # <class 'dict'>

固化存储

通过open("file_name","type")来对文件进行操作,将内存中的数据保存在磁盘中(内存中的数据当程序结束或主机关闭时将被释放)

同时可以通过encoding字符集

参数

  • r 只读
  • w 覆盖写
  • a 追加写

r+ / w+ /a+ 的区别

模式文件不存在文件已存在初始指针位置写入行为关键特点
r+报错保留原有内容文件开头覆盖指针位置的内容适合「读取 + 修改」已有文件,不会清空原内容
w+创建新文件清空原有内容文件开头从开头写入(覆盖)适合「先写后读」,但会清空原文件
a+创建新文件保留原有内容文件末尾始终追加到末尾适合「读取 + 追加」,写入不会覆盖原有内容

默认r/w/a后面有一个文本类型为t(普通文本),如果需要操作的文件是二进制文本,要在后面添加b,如“rb”

相关方法

# fp.read(5) 按照字节数开始读 读和写都是在文件指针后开始读写
# fp.seek(0) 重置光标位置为开头
# fp.readline() 从光标的位置读到行尾
# fp.readlines() 默认从光标位置读到文件末尾,按行存放到列表中
# fp.readlines(4) 读取到累计字符数 > 4的行
# for i in fp:
	print("一行一行读",i	)
# fp.close()  关闭打开的文件,释放资源

注意:

with open(…) as f:是文件操作的最优写法,自动关闭文件句柄,无需手动调用f.close()

实例

with open("user.txt","r+",encoding="utf-8") as f:
    print(f.readlines())

输出

['{"tom": {"username": "tom", "password": "123456", "age": "20", "sex": "man"}}']

练习

登录系统
1.注册 输入账号和密码 年龄,性别
    判断是否存在
2.登录 输入账号和密码
    判断账户是否存在,密码是否正确
3.退出

解题:

import json
fr = open("user.txt","r")
str = fr.read()
fr.close()
if  str != "" :
    d1 = json.loads(str)
else:
    d1 = dict()
while True:
    choice = input("1.注册\t2.登录\t3.退出\n")
    match choice:
        case "1":
            username,password,age,sex = input("请输入用户名,密码,年龄,性别\n").split()
            if username in  d1:
                print("用户已存在")
            else:
                d1[username] = {"username":username,"password":password,"age":age,"sex":sex}
        case "2":
            username,password = input("请输入用户名和密码\n").split()
            if username not in d1:
                print("用户不存在\n")
            elif d1[username]["password"] != password:
                print("密码错误\n")
            else:
                print("登录成功")
        case "3":
            str1 = json.dumps(d1)
            fw = open("user.txt", "w")
            fw.write(str1)
            fw.close()
            print("退出成功")
            break

到此这篇关于Python数据序列化和固化存储的方式的文章就介绍到这了,更多相关python数据序列化和固化存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python入门基本操作列表排序用法详解

    Python入门基本操作列表排序用法详解

    本篇文中主要介绍列表的基本的组成,怎么访问列表、列表的切片、列表的排序、列表的添加、列表的删除等内容,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • python (pyqt) 表格显示图片的实现方式

    python (pyqt) 表格显示图片的实现方式

    这篇文章主要介绍了python (pyqt) 表格显示图片的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • opencv图片处理常见操作方法总结

    opencv图片处理常见操作方法总结

    这篇文章主要介绍了opencv图片处理常见操作方法的相关资料,通过代码示例,展示了如何对图片进行这些操作,并解释了图片在计算机中以数组形式存储的原理,需要的朋友可以参考下
    2026-01-01
  • 解决Jupyter Notebook使用parser.parse_args出现错误问题

    解决Jupyter Notebook使用parser.parse_args出现错误问题

    这篇文章主要介绍了解决Jupyter Notebook使用parser.parse_args出现错误问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 使用Python Seaborn创建热力图的制作指南

    使用Python Seaborn创建热力图的制作指南

    热力图作为一种直观的数据可视化工具,通过颜色深浅和渐变映射数据值,广泛应用于数据密度分析、趋势挖掘和跨维度对比,本文将结合Python的seaborn库,从热力图的核心原理到实际操作案例,逐步讲解如何利用热力图揭示数据背后的隐藏规律,需要的朋友可以参考下
    2025-08-08
  • 基于Python实现一个简单的注册机并生成卡密

    基于Python实现一个简单的注册机并生成卡密

    这篇文章主要为大家详细介绍了如何使用Python编写一个简单而强大的注册机,生成卡密来实现用户注册,从而轻松登录应用程序,有需要的小伙伴快可以参考下
    2023-12-12
  • Python借助 Spire.PDF for Python提取PDF图片的终极指南

    Python借助 Spire.PDF for Python提取PDF图片的终极指南

    PDF 文件中的图片往往蕴藏着重要的信息,但提取它们的过程却可能颇具挑战性,本文将借助 Spire.PDF for Python高效地从 PDF 文档中提取所需的图片,感兴趣的可以了解下
    2026-01-01
  • Python函数式编程

    Python函数式编程

    函数式编程Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量。
    2017-07-07
  • Python深拷贝与浅拷贝用法实例分析

    Python深拷贝与浅拷贝用法实例分析

    这篇文章主要介绍了Python深拷贝与浅拷贝用法,结合实例形式分析了Python对象的复制、深拷贝、浅拷贝等操作原理、用法及相关注意事项,需要的朋友可以参考下
    2019-05-05
  • python之停止打印日志/重复打印日志方式

    python之停止打印日志/重复打印日志方式

    这篇文章主要介绍了python停止打印日志/重复打印日志方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论