python3數據序列化工具json

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

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本語言中使用,不能跨語言使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章