聊一聊Python 實現資料的序列化操作

PHPz
發布: 2023-04-12 09:31:12
轉載
2067 人瀏覽過

在日常開發中,對資料進行序列化和反序列化是常見的資料操作,Python提供了兩個模組方便開發者實現資料的序列化操作,即 json 模組和 pickle 模組。這兩個模組主要差異如下:

  • json 是一個文字序列化格式,而pickle 是一個二元序列化格式;
  • json 是我們可以直觀閱讀的,而pickle不行;
  • json 是可互通的,在Python 系統之外廣泛使用,而pickle 則是Python 專用的;
  • 預設情況下,json 只能表示Python 內建類型的子集,不能表示自訂的類別;但pickle 可以表示大量的Python 資料類型。

聊一聊Python 實現資料的序列化操作

Json 模組

Json 是一種輕量級的資料交換格式,由於其具有傳輸資料量小、資料格式易解析等特點,它被廣泛應用於各系統之間的交互操作,作為一種資料格式傳遞資料。它包含多個常用函數,具體如下:

dumps()函數

dumps()函數可以將 Python 物件編碼成 Json 字串。例如:

#字典转成json字符串 加上ensure_ascii=False以后,可以识别中文, indent=4是间隔4个空格显示 

import json 
d={'小明':{'sex':'男','addr':'上海','age':26},'小红':{ 'sex':'女','addr':'上海', 'age':24},}
print(json.dumps(d,ensure_ascii=False,indent=4)) 

#执行结果:
{
"小明": {
"sex": "男",
"addr": "上海",
"age": 26
},
"小红": {
"sex": "女",
"addr": "上海",
"age": 24
}
}
登入後複製

dump()函數

dump()函數可以將 Python物件編碼成 json 字串,自動寫入到檔案中,不需要再單獨寫檔案。例如:

#字典转成json字符串,不需要写文件,自动转成的json字符串写入到‘users.json’的文件中 
import json 
d={'小明':{'sex':'男','addr':'上海','age':26},'小红':{ 'sex':'女','addr':'上海', 'age':24},}
#打开一个名字为‘users.json’的空文件
fw =open('users.json','w',encoding='utf-8')

json.dump(d,fw,ensure_ascii=False,indent=4)
登入後複製

loads()函數

loads()函數可以將 json 字串轉換成 Python 的資料型別。例如:

#这是users.json文件中的内容
{
"小明":{
"sex":"男",
"addr":"上海",
"age":26
},
"小红":{
"sex":"女",
"addr":"上海",
"age":24
}
}

#!/usr/bin/python3
#把json串变成python的数据类型 
import json
#打开‘users.json’的json文件
f =open('users.json','r',encoding='utf-8')
#读文件
res=f.read()
print(json.loads(res)) 

#执行结果:
{'小明': {'sex': '男', 'addr': '上海', 'age': 26}, '小红': {'sex': '女', 'addr': '上海', 'age': 24}}
登入後複製

load()函數

load()跟loads()功能相似,load()函數可以將json 字串轉換成Python 資料類型,不同的是前者的參數是一個文件對象,不需要再單獨讀取此文件。例如:

#把json串变成python的数据类型:字典,传一个文件对象,不需要再单独读文件 
import json 
#打开文件
f =open('users.json','r',encoding='utf-8') 
print(json.load(f))

#执行结果:
{'小明': {'sex': '男', 'addr': '上海', 'age': 26}, '小红': {'sex': '女', 'addr': '上海', 'age': 24}}
登入後複製

Pickle 模組

Pickle 模組與Json 模組功能相似,也包含四個函數,即dump()、dumps()、loads() 和load(),它們的主要差異如下:

dumps 和dump 的差異在於前者是將物件序列化,而後者是將物件序列化並儲存到檔案中。

loads 和 load 的差異在於前者是將序列化的字串反序列化,而後者是將序列化的字串從檔案讀取並反序列化。

dumps()函數

dumps()函數可以將資料透過特殊的形式轉換為只有python語言認識的字串,例如:

import pickle
# dumps功能
import pickle
data = ['A', 'B', 'C','D']
print(pickle.dumps(data))

b'x80x03]qx00(Xx01x00x00x00Aqx01Xx01x00x00x00Bqx02Xx01x00x00x00Cqx03Xx01x00x00x00Dqx04e.'
登入後複製

dump()函數

dump()函數可以將資料透過特殊的形式轉換為只有python語言認識的字串,並寫入檔案。例如:

# dump功能
with open('test.txt', 'wb') as f:
pickle.dump(data, f)
print('写入成功')

写入成功
登入後複製

loads()函數

loads()函數可以將pickle資料轉換為python的資料結構。例如:

# loads功能
msg = pickle.loads(datastr)
print(msg)

['A', 'B', 'C', 'D']
登入後複製

load()函數

load()函數可以從資料檔案讀取數據,並轉換為python的資料結構。例如:

# load功能
with open('test.txt', 'rb') as f:
 data = pickle.load(f)
print(data)

['A', 'B', 'C', 'D']
登入後複製

總結

本節為大家介紹 Python 中 json&pickle 模組的常用操作,對於實現資料的序列化和反序列化提供了支撐。


以上是聊一聊Python 實現資料的序列化操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板