在日常開發中,對資料進行序列化和反序列化是常見的資料操作,Python提供了兩個模組方便開發者實現資料的序列化操作,即 json 模組和 pickle 模組。這兩個模組主要差異如下:
Json 是一種輕量級的資料交換格式,由於其具有傳輸資料量小、資料格式易解析等特點,它被廣泛應用於各系統之間的交互操作,作為一種資料格式傳遞資料。它包含多個常用函數,具體如下:
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()函數可以將 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()函數可以將 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()跟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 模組與Json 模組功能相似,也包含四個函數,即dump()、dumps()、loads() 和load(),它們的主要差異如下:
dumps 和dump 的差異在於前者是將物件序列化,而後者是將物件序列化並儲存到檔案中。
loads 和 load 的差異在於前者是將序列化的字串反序列化,而後者是將序列化的字串從檔案讀取並反序列化。
dumps()函數可以將資料透過特殊的形式轉換為只有python語言認識的字串,例如:
import pickle # dumps功能 import pickle data = ['A', 'B', 'C','D'] print(pickle.dumps(data)) b'x80x03]qx00(Xx01x00x00x00Aqx01Xx01x00x00x00Bqx02Xx01x00x00x00Cqx03Xx01x00x00x00Dqx04e.'
dump()函數可以將資料透過特殊的形式轉換為只有python語言認識的字串,並寫入檔案。例如:
# dump功能 with open('test.txt', 'wb') as f: pickle.dump(data, f) print('写入成功') 写入成功
loads()函數可以將pickle資料轉換為python的資料結構。例如:
# loads功能 msg = pickle.loads(datastr) print(msg) ['A', 'B', 'C', 'D']
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中文網其他相關文章!