json(pickle)

序列化:將變量從內(nèi)存中變?yōu)榭纱鎯?chǔ)或傳輸?shù)倪^程哪轿;
反序列化:把序列化的內(nèi)容重新讀到內(nèi)存;

pickle

python 自帶 pickle 模塊用來實(shí)現(xiàn)序列化與反序列化道伟;

寫文件

pickle.dumps() 可以把對(duì)象轉(zhuǎn)換為 bytes帚豪,然后就可以把這個(gè) bytes 寫入文件了(它會(huì)自動(dòng)創(chuàng)建文件,不需要額外手動(dòng)創(chuàng)建):

>>> import pickle
>>> d = dict(name='majun', age=27)
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x05\x00\x00\x00majunq\x02X\x03\x00\x00\x00ageq\x03K\x1bu.'

pickle.dump() 方法可以直接把對(duì)象序列化后寫入文件:

>>> f = open('dump.txt','wb')
>>> pickle.dump(d,f)
>>> f.close()

結(jié)果:

寫入的數(shù)據(jù).png
讀文件

pickle.load() 方法

>>> f = open('dump.txt','rb')
>>> pickle.load(f)
{'name': 'majun', 'age': 27}
>>> f.close()

但是 pickle 處理的數(shù)據(jù)只能用于 python 空另,且不同版本的數(shù)據(jù)也不兼容。因此蹋砚,pickle 只能處理一些不重要的數(shù)據(jù)扼菠。如果想要保存交互式數(shù)據(jù),就只能用 json 模塊了都弹。

json

如果需要在不同語言之間傳遞對(duì)象娇豫,就需要把對(duì)象序列化為標(biāo)準(zhǔn)格式匙姜,比如 XML畅厢。但最好序列化為 JSON 格式,因?yàn)?JSON 表示出來就是字符串氮昧,可以被所有語言讀取框杜,也可以方便讀取和網(wǎng)絡(luò)傳輸。JSON 不僅是標(biāo)準(zhǔn)格式袖肥,而且比 XML 更快咪辱。

json類型與python類型.png

python 內(nèi)置模塊 json 能夠?qū)崿F(xiàn) python 對(duì)象與 json 對(duì)象的轉(zhuǎn)換:
json.dumps() 轉(zhuǎn)換為 json 對(duì)象

>>> import json
>>> d = dict(name="majun", age=27)
>>> json.dumps(d)
'{"name": "majun", "age": 27}'

如果對(duì)格式有要求且正確處理中文,可設(shè)置相關(guān)參數(shù):

>>> with open('test.txt', 'w') as f:
...     d.update(dict(sex='男'))
...     data = json.dumps(d, indent = 2, ensure_ascii = False)
...     f.write(data)
圖片.png

json.loads() 轉(zhuǎn)換為 python 對(duì)象

>>> a = json.dumps(d)
>>> json.loads(a)
{'name': 'majun', 'age': 27}
>>> c = '{"name":"majun", "age": 27}'
>>> json.loads(c)
{'name': 'majun', 'age': 27}

由于 JSON 標(biāo)準(zhǔn)規(guī)定 JSON 編碼采用 UTF-8椎组,所以我們能正確的進(jìn)行 python 與 json 數(shù)據(jù)之間的轉(zhuǎn)換油狂;

json.dump() 、json.load() 方法實(shí)現(xiàn)文件的直接寫入/讀取

>>> f = open('dump.txt','w')
>>> json.dump(d, f)
>>> f.close()
>>> f = open('dump.txt','r')
>>> json.load(f)
{'name': 'majun', 'age': 27}
圖片.png

注意:

  • dumps()、loads() 只是將 python 數(shù)據(jù)與 json 數(shù)據(jù)進(jìn)行轉(zhuǎn)換专筷;
  • dump()弱贼、load() 可以直接進(jìn)行轉(zhuǎn)換,然后保存 / 提取 文檔磷蛹;
>>> f = open('dump.txt','r')
>>> a = f.read()
>>> a
'{"name": "majun", "age": 27}'
>>> json.loads(a)
{'name': 'majun', 'age': 27}
  • 寫文件默認(rèn)會(huì)清空已有文件吮旅,然后寫入。如果將第二個(gè)參數(shù)替換為 "a"味咳,那么可以在就內(nèi)容后面追加新內(nèi)容庇勃。








JSON進(jìn)階
面向?qū)ο缶幊涛覀円话闶褂?類class 存儲(chǔ)數(shù)據(jù),那么我們?cè)趺幢4孢@類數(shù)據(jù)呢槽驶?

簡(jiǎn)單說就是屬性與字典的相互轉(zhuǎn)換:
保存到文件的時(shí)候责嚷,轉(zhuǎn)換成字典形式。取出來的時(shí)候捺檬,轉(zhuǎn)換成類屬性形式再层;

import json


def save(data, path):
    d = json.dumps(data, indent=2, ensure_ascii=False)
    with open(path, 'w') as f:
        f.write(d)


def load(path):
    with open(path, 'r') as f:
        data = f.read()
        return json.loads(data)


class person(object):
    def __init__(self, form):
        self.name = form.get('name', '')
        self.sex = form.get('sex', '')
        self.age = form.get('age', 0)

    @classmethod
    def new(cls, form, **kwargs):
        p = cls(form)
        for k, v in kwargs.items():
            setattr(p, k, v)
        p.save()
        return p

    @classmethod
    def new_from_dict(cls, dic):
        p = cls({})
        for k, v in dic.items():
            setattr(p, k, v)
        return p

    @classmethod
    def all(cls):
        path = cls.path()
        persons = load(path)
        ps = [ cls.new_from_dict(p) for p in persons]
        return ps

    @classmethod
    def path(cls):
        name = cls.__class__.__name__
        path = '{}.text'.format(name)
        return path

    def save(self):
        ps = self.all()
        ps = ps.append(self)
        data = [p.__dict__ for p in ps]
        path = self.path()
        save(data, path)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市堡纬,隨后出現(xiàn)的幾起案子聂受,更是在濱河造成了極大的恐慌,老刑警劉巖烤镐,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛋济,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡炮叶,警方通過查閱死者的電腦和手機(jī)碗旅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镜悉,“玉大人祟辟,你說我怎么就攤上這事÷乱蓿” “怎么了旧困?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)稼锅。 經(jīng)常有香客問我吼具,道長(zhǎng),這世上最難降的妖魔是什么矩距? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任拗盒,我火速辦了婚禮,結(jié)果婚禮上锥债,老公的妹妹穿的比我還像新娘陡蝇。我一直安慰自己痊臭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布登夫。 她就那樣靜靜地躺著趣兄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悼嫉。 梳的紋絲不亂的頭發(fā)上艇潭,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音戏蔑,去河邊找鬼蹋凝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛总棵,可吹牛的內(nèi)容都是我干的鳍寂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼情龄,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼迄汛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骤视,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤鞍爱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后专酗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睹逃,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年祷肯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沉填。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佑笋,死狀恐怖翼闹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒋纬,我是刑警寧澤猎荠,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站颠锉,受9級(jí)特大地震影響法牲,放射性物質(zhì)發(fā)生泄漏史汗。R本人自食惡果不足惜琼掠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望停撞。 院中可真熱鬧瓷蛙,春花似錦悼瓮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冠桃,卻和暖如春命贴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背食听。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工胸蛛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人樱报。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓葬项,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親迹蛤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子民珍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • json模塊 用于字符串和python數(shù)據(jù)類型間進(jìn)行轉(zhuǎn)換,提供了四個(gè)功能:dumps盗飒、dump嚷量、loads、loa...
    狗狗胖妞閱讀 369評(píng)論 1 2
  • 簡(jiǎn)介 什么是序列化 序列化 (Serialization):將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程落包。即:...
    馬小跳_閱讀 296評(píng)論 0 0
  • pyton review 學(xué)習(xí)指南 https://www.zhihu.com/question/29138020...
    孫小二wuk閱讀 1,046評(píng)論 0 2
  • IO編程概念 IO在計(jì)算機(jī)中指Input/Output部蛇,也就是輸入和輸出。由于程序和運(yùn)行時(shí)數(shù)據(jù)是在內(nèi)存中駐留咐蝇,由C...
    時(shí)間之友閱讀 724評(píng)論 0 0
  • 工作可以讓我們覺得自己有價(jià)值涯鲁,工作可以幫助發(fā)展成就和自尊,工作可以讓我們使想象變?yōu)楝F(xiàn)實(shí)∮行颍瑪利亞蒙臺(tái)梭利相信孩...
    寶貝U家閱讀 701評(píng)論 0 1