资讯专栏INFORMATION COLUMN

序列化模块之json和pickle

joyqi / 2459人阅读

摘要:将字符串成对象错误,必须用双引号输出二可以序列化任意的数据类型,包括集合和类的对象实例输出结果注意将的数据写到文件的时候,文件必须使用的模式打开后的模式写入

什么叫序列化?

将原本的字典、列表或者类的实例对象等内容转换成一个字符串的过程就叫做序列化。

为什么要序列化?

1、以某种存储形式使对象(例如dict,object)持久化,例如存储到数据库中

2、将对象从一个地方(网络)传递到另一个地方

用于序列化的两个模块:
json,用于字符串 和 python数据类型间进行转换
pickle,用于python特有的类型 和 python的数据类型间进行转换

一.json

首先明确一点:json本质上就是字符串

python对象->json使用json.dumps(python对象)

json->python对象使用json.loads(json字符串)

json字符串中的值必须用双引号,见下例

在python中。只有基本的数据类型才能转换成json格式的字符串,也即:int,float,str,list,tuple,dict

小技巧:如何记忆dumps和loads呢?我们mysql,redis经常使用到dumps来持久化,也就是将mysql里的数据以字符串或二进制的形式存储到硬盘,所以对应到json中的dumps,将抽象的数据内容(python对象)转成字符串。
将python对象dumps成json字符串
import json
pesron = [{"user":"zs","age":10},
          {"user": "ls", "age":20}]
x = 10
y = {"user":"zs","age":10}
json_str1 = json.dumps(pesron)
json_str2 = json.dumps(x)
json_str3 = json.dumps(y)
print(type(json_str1),type(x),type(y))
print(json_str1,json_str2,json_str3)

输出

  
[{"user": "zs", "age": 10}, {"user": "ls", "age": 20}] 10 {"user": "zs", "age": 10}

如果我们要想把序列化的内容写到文件中,可以直接使用json.dump

import json
dic = {1:"a",2:"b"}
f = open("myfile","w",encoding="utf-8")
json.dump(dic,f)
f.close()

使用json.dumpsjson.dump的时候,只能存放ascii的字符,因此会将中文进行转义,这时候我们可以做使用ensure_ascii=False关闭这个特性。

将json字符串loads成python对象
import json
#json_str = "[{"user":"zs","age":10},{"user": "ls", "age":20}]"  错误,必须用双引号
json_str1 = """[{"user":"zs","age":10},{"user": "ls", "age":20}]"""
json_str2 = """{"user":"zs","age":10}"""
json_str3 = """12"""

person = json.loads(json_str1)
x = json.loads(json_str2)
y = json.loads(json_str3)
print(type(person),type(x),type(y))
print(person,x,y)

输出

  
[{"user": "zs", "age": 10}, {"user": "ls", "age": 20}] {"user": "zs", "age": 10} 12
二.pickle

pickle可以序列化任意的数据类型,包括集合和类的对象实例

import pickle

class ABC:
    a = 10

    def __init__(self,m,n):
        self.m = m
        self.n = n

abc = ABC(1,2)
res = pickle.dumps(abc)
back_res = pickle.loads(res)
print(res)
print(back_res)
print(back_res.a)

输出结果

b"x80x03c__main__
ABC
qx00)x81qx01}qx02(Xx01x00x00x00mqx03Kx01Xx01x00x00x00nqx04Kx02ub."
<__main__.ABC object at 0x10999fba8>
10

注意:将pickle.dumps的数据写到文件的时候,文件必须使用rb的模式打开后wb的模式写入

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42368.html

相关文章

  • python基础教程:列化

    摘要:默认情况下,它也是不安全的,如果数据是由黑客精心设计的,则反序列化的数据可能被植入恶意代码。总结为我们提供了数据序列化的工具。如果是自己内部使用,可以作为一个选择进行复杂对象的序列化。 上一节我们学习了文件的读写,把一个字符串(或字节对象)保存到磁盘是一件很容易的事情。但是在实际编程中,我们经常需要保存结构化数据,比如复杂的字典、嵌套的列表等等,这时候就需要我们想办法把这些结构化数据先...

    gityuan 评论0 收藏0
  • Python怎么实现数据的列化操作?下面给大家做一个解答

      小编写这篇文章的一个主要目的,主要是给大家讲解关于Python的一些技能,主要是会涉及到相关的一些数据问题,那么,怎么样才能够实现序列化的一些操作呢?下面小编就给大家详细的去做一个解答。  在日常开发中,对数据进行序列化和反序列化是常见的数据操作,Python提供了两个模块方便开发者实现数据的序列化操作,即json模块和pickle模块。这两个模块主要区别如下:  json是一个文本序列化格式...

    89542767 评论0 收藏0
  • python--模块2

    摘要:可能没有用户输出的消息创建一个,用于写入日志文件再创建一个,用于输出到控制台对象可以添加多个和对象序列化模块什么叫序列化将原本的字典列表等内容转换成一个字符串的过程就叫做序列化。 hashlib模块 1.Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(...

    13651657101 评论0 收藏0
  • Python基础(十一)数据存储

    摘要:默认为或者说,是以格式保存对象如果设置为或者,则以压缩的二进制格式保存对象。但是,要小心坑试图增加一个坑就在这里当试图修改一个已有键的值时没有报错,但是并没有修改成功。要填平这个坑,需要这样做多一个参数没有坑了还用循环一下 pickle pickle是标准库中的一个模块,在Python 2中还有一个cpickle,两者的区别就是后者更快。所以,下面操作中,不管是用import pick...

    Songlcy 评论0 收藏0
  • picklecPickle:Python对象的列化(上)

    摘要:使用来创建一个表示该对象值的字符串。数据被序列化以后,你可以将它们写入文件套接字管道等等中。如果你使用管道或者套接字,在通过连至另一端的连接倾倒所有对象推送数据之后,别忘了冲洗。 目的:Python对象序列化 可用性:pickle至少1.4版本,cPickle 1.5版本以上 pickle模块实现了一种算法,将任意一个Python对象转化成一系列字节(byets)。此过程也调用了s...

    Sanchi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<