日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 对象序列化 pickling_python操作文件——序列化pickling和JSON

發布時間:2023/12/20 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 对象序列化 pickling_python操作文件——序列化pickling和JSON 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當我們在內存中定義一個dict的時候,我們是可以隨時修改變量的內容的:

>>> d=dict(name='wc',age=28)>>>d

{'name': 'wc', 'age': 28}

我們可以隨時修改name和age的值。但是當我們重新運行程序的時候,name、age的初始化值還是wc和28,實際情況下我們需要保存該dict的最后的值。

我們把變量從內存中變成可存儲或傳輸的過程稱之為序列化。python中稱之為pickling,Java中叫serialization,都是一個意思。序列化之后我們就可以把內容寫入到磁盤或者通過網絡傳輸出去。反之,把變量從序列化的對象重新讀取到內存中稱之為反序列化,洋名叫unpickling。

python中實現序列化的模塊叫pickle。pickle.dumps()方法可以把任意的對象序列化成一個Bytes,然后就可以把這個bytes寫入文件。pickle.dump()方法可以直接把對象序列化寫入一個file-like的對象中。相反的,pickle.loads()方法可以把文件中的內容讀入到一個bytes,然后把這個bytes對象轉換為目標類型對象,也可以使用pickle.load()方法直接從一個file-like對象中直接反序列化出對象:

>>> f = open('E:\\python3.6.3\\workspace\\dump.txt','wb')>>>pickle.dump(d,f)>>>f.close()>>> f=open('E:\\python3.6.3\\workspace\\dump.txt','rb')>>> c =pickle.load(f)>>>c

{'name': 'wc', 'age': 28}

JSON

實際開發中我們或多或少都會碰到跨語言傳輸數據的問題,這就要求我們要把對象序列化為標準格式,比如JSON和XML。JSON的表現形式就是一個字符串,可以被所有的語言讀取。可以方便的存儲到磁盤或者通過網絡傳輸。JSON表示的對象是標準的JavaScript的對象,其和python內置的數據類型的對應關系如下:

JSON類型

Python類型

{}

dict

[]

list

""

str

123.4

int 或 float

true/false

True/False

null

None

python內置了json模塊可以方便的在python對象和json對象之間轉換:

>>> importjson>>> d=dict(name='wc',age=28)>>>json.dumps(d)'{"name": "wc", "age": 28}'

>>> c =json.dumps(d)>>> d=json .loads(c)>>>d

{'name': 'wc', 'age': 28}

python內置的數據類型可以直接轉換為json類型,但是class對象并不刻意直接轉為json,這是因為class對象默認的并不具有可序列化的屬性。

2種方法,第一種是通過dumps()方法的default參數,把任意一個對象轉換為一個可序列化的對象。下面的例子中,先定義一個Student的class,然后定義一個student2dict()函數,該函數的作用就是把Student的屬性轉換為dict,最后再序列化為json:

>>> importjson>>> classStudent(object):

...def __init__(self,name,age):

... self.name=name

... self.age=age

...>>> defstudent2dict(s):

...return {'name':s.name,'age':s.age}

...>>> s=Student('wc',28)>>> print(json.dumps(s,default=student2dict))

{"name": "wc", "age": 28}

第二種方法,借用class對象的__dict__屬性:

>>> classTeacher(object):

...def __init__(self,name,age):

... self.name=name

... self.age=age

...>>> t = Teacher('ly',90)>>> print(json.dumps(t,default=lambda obj:obj.__dict__))

{"name": "ly", "age": 90}

總結

以上是生活随笔為你收集整理的python 对象序列化 pickling_python操作文件——序列化pickling和JSON的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。