成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

序列化模塊之json和pickle

joyqi / 2561人閱讀

摘要:將字符串成對(duì)象錯(cuò)誤,必須用雙引號(hào)輸出二可以序列化任意的數(shù)據(jù)類型,包括集合和類的對(duì)象實(shí)例輸出結(jié)果注意將的數(shù)據(jù)寫到文件的時(shí)候,文件必須使用的模式打開(kāi)后的模式寫入

什么叫序列化?

將原本的字典、列表或者類的實(shí)例對(duì)象等內(nèi)容轉(zhuǎn)換成一個(gè)字符串的過(guò)程就叫做序列化。

為什么要序列化?

1、以某種存儲(chǔ)形式使對(duì)象(例如dict,object)持久化,例如存儲(chǔ)到數(shù)據(jù)庫(kù)中

2、將對(duì)象從一個(gè)地方(網(wǎng)絡(luò))傳遞到另一個(gè)地方

用于序列化的兩個(gè)模塊:
json,用于字符串 和 python數(shù)據(jù)類型間進(jìn)行轉(zhuǎn)換
pickle,用于python特有的類型 和 python的數(shù)據(jù)類型間進(jìn)行轉(zhuǎn)換

一.json

首先明確一點(diǎn):json本質(zhì)上就是字符串

python對(duì)象->json使用json.dumps(python對(duì)象)

json->python對(duì)象使用json.loads(json字符串)

json字符串中的值必須用雙引號(hào),見(jiàn)下例

在python中。只有基本的數(shù)據(jù)類型才能轉(zhuǎn)換成json格式的字符串,也即:int,float,str,list,tuple,dict

小技巧:如何記憶dumps和loads呢?我們mysql,redis經(jīng)常使用到dumps來(lái)持久化,也就是將mysql里的數(shù)據(jù)以字符串或二進(jìn)制的形式存儲(chǔ)到硬盤,所以對(duì)應(yīng)到j(luò)son中的dumps,將抽象的數(shù)據(jù)內(nèi)容(python對(duì)象)轉(zhuǎn)成字符串。
將python對(duì)象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}

如果我們要想把序列化的內(nèi)容寫到文件中,可以直接使用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的時(shí)候,只能存放ascii的字符,因此會(huì)將中文進(jìn)行轉(zhuǎn)義,這時(shí)候我們可以做使用ensure_ascii=False關(guān)閉這個(gè)特性。

將json字符串loads成python對(duì)象
import json
#json_str = "[{"user":"zs","age":10},{"user": "ls", "age":20}]"  錯(cuò)誤,必須用雙引號(hào)
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可以序列化任意的數(shù)據(jù)類型,包括集合和類的對(duì)象實(shí)例

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)

輸出結(jié)果

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

注意:將pickle.dumps的數(shù)據(jù)寫到文件的時(shí)候,文件必須使用rb的模式打開(kāi)后wb的模式寫入

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42368.html

相關(guān)文章

  • python基礎(chǔ)教程:列化

    摘要:默認(rèn)情況下,它也是不安全的,如果數(shù)據(jù)是由黑客精心設(shè)計(jì)的,則反序列化的數(shù)據(jù)可能被植入惡意代碼。總結(jié)為我們提供了數(shù)據(jù)序列化的工具。如果是自己內(nèi)部使用,可以作為一個(gè)選擇進(jìn)行復(fù)雜對(duì)象的序列化。 上一節(jié)我們學(xué)習(xí)了文件的讀寫,把一個(gè)字符串(或字節(jié)對(duì)象)保存到磁盤是一件很容易的事情。但是在實(shí)際編程中,我們經(jīng)常需要保存結(jié)構(gòu)化數(shù)據(jù),比如復(fù)雜的字典、嵌套的列表等等,這時(shí)候就需要我們想辦法把這些結(jié)構(gòu)化數(shù)據(jù)先...

    gityuan 評(píng)論0 收藏0
  • Python怎么實(shí)現(xiàn)數(shù)據(jù)的列化操作?下面給大家做一個(gè)解答

      小編寫這篇文章的一個(gè)主要目的,主要是給大家講解關(guān)于Python的一些技能,主要是會(huì)涉及到相關(guān)的一些數(shù)據(jù)問(wèn)題,那么,怎么樣才能夠?qū)崿F(xiàn)序列化的一些操作呢?下面小編就給大家詳細(xì)的去做一個(gè)解答?! ≡谌粘i_(kāi)發(fā)中,對(duì)數(shù)據(jù)進(jìn)行序列化和反序列化是常見(jiàn)的數(shù)據(jù)操作,Python提供了兩個(gè)模塊方便開(kāi)發(fā)者實(shí)現(xiàn)數(shù)據(jù)的序列化操作,即json模塊和pickle模塊。這兩個(gè)模塊主要區(qū)別如下:  json是一個(gè)文本序列化格式...

    89542767 評(píng)論0 收藏0
  • python--模塊2

    摘要:可能沒(méi)有用戶輸出的消息創(chuàng)建一個(gè),用于寫入日志文件再創(chuàng)建一個(gè),用于輸出到控制臺(tái)對(duì)象可以添加多個(gè)和對(duì)象序列化模塊什么叫序列化將原本的字典列表等內(nèi)容轉(zhuǎn)換成一個(gè)字符串的過(guò)程就叫做序列化。 hashlib模塊 1.Python的hashlib提供了常見(jiàn)的摘要算法,如MD5,SHA1等等。什么是摘要算法呢?摘要算法又稱哈希算法、散列算法。它通過(guò)一個(gè)函數(shù),把任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長(zhǎng)度固定的數(shù)據(jù)串(...

    13651657101 評(píng)論0 收藏0
  • Python基礎(chǔ)(十一)數(shù)據(jù)存儲(chǔ)

    摘要:默認(rèn)為或者說(shuō),是以格式保存對(duì)象如果設(shè)置為或者,則以壓縮的二進(jìn)制格式保存對(duì)象。但是,要小心坑試圖增加一個(gè)坑就在這里當(dāng)試圖修改一個(gè)已有鍵的值時(shí)沒(méi)有報(bào)錯(cuò),但是并沒(méi)有修改成功。要填平這個(gè)坑,需要這樣做多一個(gè)參數(shù)沒(méi)有坑了還用循環(huán)一下 pickle pickle是標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,在Python 2中還有一個(gè)cpickle,兩者的區(qū)別就是后者更快。所以,下面操作中,不管是用import pick...

    Songlcy 評(píng)論0 收藏0
  • picklecPickle:Python對(duì)象的列化(上)

    摘要:使用來(lái)創(chuàng)建一個(gè)表示該對(duì)象值的字符串。數(shù)據(jù)被序列化以后,你可以將它們寫入文件套接字管道等等中。如果你使用管道或者套接字,在通過(guò)連至另一端的連接傾倒所有對(duì)象推送數(shù)據(jù)之后,別忘了沖洗。 目的:Python對(duì)象序列化 可用性:pickle至少1.4版本,cPickle 1.5版本以上 pickle模塊實(shí)現(xiàn)了一種算法,將任意一個(gè)Python對(duì)象轉(zhuǎn)化成一系列字節(jié)(byets)。此過(guò)程也調(diào)用了s...

    Sanchi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<