溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中怎么使用json模塊和pickle模塊

發(fā)布時(shí)間:2020-08-26 16:58:24 來(lái)源:億速云 閱讀:110 作者:Leah 欄目:編程語(yǔ)言

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Python中怎么使用json模塊和pickle模塊,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

json模塊和pickle模塊的用法

在python中,可以使用pickle和json兩個(gè)模塊對(duì)數(shù)據(jù)進(jìn)行序列化操作。

其中:

json可以用于字符串或者字典等與python數(shù)據(jù)類型之間的序列化與反序列化操作。

pickle可以用于python特有類型與python數(shù)據(jù)類型之間的序列化與反序列化操作。

json模塊的用法

1. 查看json模塊內(nèi)的方法:

>>> import json
>>> dir(json)
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', 
'__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', 
'_default_encoder', 'decoder', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']

2. json模塊常用的功能的:dumps,dump,loads,load

3.使用json.dumps方法可以將字典等數(shù)據(jù)格式化成一個(gè)字符串,這樣可以方便別的編程語(yǔ)言進(jìn)行調(diào)用。

>>> dic1={"k1":"v1","k2":"v2"}
>>> res=json.dumps(dic1)
>>> print(res)
{"k1": "v1", "k2": "v2"}
>>> print(type(res))
<class 'str'>

格式化后的字符串看似跟原來(lái)的沒(méi)什么兩樣,但是查看格式化后的類型就會(huì)發(fā)現(xiàn)是一個(gè)字符串,已經(jīng)被json模塊處理過(guò)了。

4.可以使用json.loads進(jìn)行反序列化

>>> print(type(res2))
<class 'dict'>
>>> print(res)
{"k1": "v1", "k2": "v2"}
>>> print(type(res))
<class 'str'>
>>> res2=json.loads(res)
>>> print(res2)
{'k1': 'v1', 'k2': 'v2'}

5.還可以用json.dump方法把字典等數(shù)據(jù)類型序列化進(jìn)入一個(gè)文件中,等待別的程序進(jìn)行調(diào)用。

import json
dic1={"k1":"v1","k2":"v2"}
with open("f1","w") as f:
    json.dump(dic1,f)

運(yùn)行上面的代碼,可以看到在同級(jí)目錄下,生成一個(gè)名為“f1”的文件,打開(kāi)f1文件,其內(nèi)容為:

{"k1": "v1", "k2": "v2"}

6.可以使用json.load方法讀取文件f1中的內(nèi)容:

import json
with open("f1") as f:
    res=json.load(f)
    print(res)
    print(type(res))

打印反序列化后的數(shù)據(jù)及其類型,得到的結(jié)果為:

{'k1': 'v1', 'k2': 'v2'}
<class 'dict'>

pickle模塊的用法

1.查看pickle模塊內(nèi)的方法:

>>> import pickle
>>> dir(pickle)
['ADDITEMS', 'APPEND', 'APPENDS', 'BINBYTES', 'BINBYTES8', 'BINFLOAT', 'BINGET', 'BININT', 'BININT1', 'BININT2',
 'BINPERSID', 'BINPUT', 'BINSTRING', 'BINUNICODE', 'BINUNICODE8', 'BUILD', 'DEFAULT_PROTOCOL', 'DICT', 'DUP', 
 'EMPTY_DICT', 'EMPTY_LIST', 'EMPTY_SET', 'EMPTY_TUPLE', 'EXT1', 'EXT2', 'EXT4', 'FALSE', 'FLOAT', 'FRAME', 
 'FROZENSET', 'FunctionType', 'GET', 'GLOBAL', 'HIGHEST_PROTOCOL', 'INST', 'INT', 'LIST', 'LONG', 'LONG1', 'LONG4',
 'LONG_BINGET', 'LONG_BINPUT', 'MARK', 'MEMOIZE', 'NEWFALSE', 'NEWOBJ', 'NEWOBJ_EX', 'NEWTRUE', 'NONE', 'OBJ', 
 'PERSID', 'POP', 'POP_MARK', 'PROTO', 'PUT', 'PickleError', 'Pickler', 'PicklingError', 'PyStringMap', 'REDUCE', 
 'SETITEM', 'SETITEMS', 'SHORT_BINBYTES', 'SHORT_BINSTRING', 'SHORT_BINUNICODE', 'STACK_GLOBAL', 'STOP', 'STRING', 
 'TRUE', 'TUPLE', 'TUPLE1', 'TUPLE2', 'TUPLE3', 'UNICODE', 'Unpickler', 'UnpicklingError', '_Framer', '_Pickler', 
 '_Stop', '_Unframer', '_Unpickler', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', 
 '__name__', '__package__', '__spec__', '_compat_pickle', '_dump', '_dumps', '_extension_cache', '_extension_registry',
 '_getattribute', '_inverted_registry', '_load', '_loads', '_test', '_tuplesize2code', 'bytes_types', 'codecs',
 'compatible_formats', 'decode_long', 'dispatch_table', 'dump', 'dumps', 'encode_long', 'format_version', 'io', 
 'islice', 'load', 'loads', 'maxsize', 'pack', 're', 'sys', 'unpack', 'whichmodule']

2.想查看某一個(gè)方法的幫助文檔:

help(pickle.modules)

比如,我想知道pickle下的dump模塊怎么用:

help(pickle.dump)

就可以得到pickle.dump方法的幫助文檔

3.pickle模塊常用的方法有:dumps,loads,dump,load

4.使用pickle.dumps對(duì)數(shù)據(jù)進(jìn)行序列化操作

import pickle
l1=[1,2,3,4,5]
t1=(1,2,3,4,5)
dic1={"k1":"v1","k2":"v2","k3":"v3"}
res_l1=pickle.dumps(l1)
res_t1=pickle.dumps(t1)
res_dic=pickle.dumps(dic1)
print(res_l1)
print(res_t1)
print(res_dic)

對(duì)數(shù)據(jù)進(jìn)行序列化操作后,打印數(shù)據(jù)得到結(jié)果為:

b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.'
b'\x80\x03(K\x01K\x02K\x03K\x04K\x05tq\x00.'
b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00
\x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.'

可以看到是一堆二進(jìn)制亂碼

5.使用pickle.loads進(jìn)行反序列化操作

import pickle
l1=[1,2,3,4,5]
t1=(1,2,3,4,5)
dic1={"k1":"v1","k2":"v2","k3":"v3"}
res_l1=pickle.dumps(l1)
res_t1=pickle.dumps(t1)
res_dic=pickle.dumps(dic1)
print(pickle.loads(res_l1),type(pickle.loads(res_l1)))
print(pickle.loads(res_t1),type(pickle.loads(res_t1)))
print(pickle.loads(res_dic),type(pickle.loads(res_dic)))

打印序列化后的數(shù)據(jù)及其類型,得到結(jié)果為:

[1, 2, 3, 4, 5] <class 'list'>
(1, 2, 3, 4, 5) <class 'tuple'>
{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} <class 'dict'>

可以看到序列化之前是什么類型的數(shù)據(jù),反序列化后其數(shù)據(jù)類型不變。

6.可以用pickle.dumps把列表,元組或字典序列化進(jìn)一個(gè)文件中以實(shí)現(xiàn)永久保存。

把列表l1序列化進(jìn)一個(gè)文件f1中:

import pickle
l1=[1,2,3,4,5]
t1=(1,2,3,4,5)
dic1={"k1":"v1","k2":"v2","k3":"v3"}
with open("f1","wb") as f:
    pickle.dump(l1,f)

7.可以使用pickle.load對(duì)文件f1進(jìn)行反序列化,得到文件f1里保存的數(shù)據(jù)

import pickle
with open("f1","rb") as f:
    res=pickle.load(f)
    print(res)

反序列化之后,打印數(shù)據(jù)及其類型可以看到:

[1, 2, 3, 4, 5]
<class 'list'>

使用同樣的方法,也可以把元組,或字典序列化進(jìn)一個(gè)文件中以實(shí)現(xiàn)永久保存。

上述就是小編為大家分享的Python中怎么使用json模塊和pickle模塊了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI