1. 程式人生 > >python3數據序列化工具json

python3數據序列化工具json

數據序列化 json序列化 pickle序列化

文件中默認只能存字符串,是不能存字典、二進制這種特殊類型的數據的,如果想把字典格式的數據存入到文件中,需要轉換一下數據類型

data = {"Name":"XiaoMing","Age":22}

f = open("test.txt","r+",encoding="utf-8")

f.write(str(data)) //把data轉換成字符串類型

f.close()


如果現在讀取數據的話,字符串肯定不能使用data["Name"]這樣的形式來調取值,所以還需要把字符串轉換成字典格式

f = open("test.txt","r+",encoding="utf-8")

data = eval(f.read()) //小技巧,使用eval可以把字符串轉換為字典格式

f.close()

print(data["Name"])


雖然上面的方式也能實現序列化與反序列化的效果,但是我們還是推薦使用標準的方式來操作

import json

data = {"Name":"XiaoMing","Age":22}

print(type(json.dumps(data))) //此處為測試,看一下dumps後的數據是什麽類型

f = open("test.txt","w",encoding="utf-8")

f.write( json.dumps(data) ) //使用json.dumps進行序列化

f.close()


接下來看一下json的反序列化

import json

f = open("test.txt","r",encoding="utf-8")

data = json.loads(f.read()) //使用json.loads進行反序列化

f.close()

print(data["Name"])


小總結:json只能處理一些簡單的數據格式,比如字典、列表、字符串等,但是json在所有的語言上都是通用的,比如用python的程序和java的程序進行交互,就需要用到json來進行轉換。


那如果想要處理一些復雜的數據呢,比如在字典中接收一個函數,看一下例子:

import pickle //需要導入pickle模塊

def hello(name):

print("name",name)

data = {"Name":"XiaoMing","Age":22,"aa":hello} //把函數的內存地址當做字典的值,比作復雜一些的數據類型

f = open("test.txt","wb") //因為pickle後的數據是二進制類型,所以打開模式要使用"b"

f.write(pickle.dumps(data))

f.close()

print(type(pickle.dumps(data))) //最後打印pickle.dumps後的數據類型


pickle反序列化

import pickle

def hello(name):

print("name",name)

f = open("test.txt","rb")

data = pickle.loads(f.read()) //pickle.loads為反序列化

f.close()

print(data["aa"]("bbb")) //此處為函數的傳參


小總結:pickle只能再python本語言中使用,不能跨語言使用。

python3數據序列化工具json