python中cPickle類使用方法詳解
在python中,一般可以使用pickle類來進行python對象的序列化,而cPickle提供了一個更快速簡單的接口,如python文檔所說的:“cPickle – A faster pickle”。
cPickle可以對任意一種類型的python對象進行序列化操作,比如list,dict,甚至是一個類的對象等。而所謂的序列化,我的粗淺的理解就是為了能夠完整的保存并能夠完全可逆的恢復。在cPickle中,主要有四個函數(shù)可以做這一工作,下面使用例子來介紹。
1. dump: 將python對象序列化保存到本地的文件
import cPickle
data = range(1000)
cPickle.dump(data,open("test\\data.pkl","wb"))
dump函數(shù)需要指定兩個參數(shù),第一個是需要序列化的python對象名稱,第二個是本地的文件,需要注意的是,在這里需要使用open函數(shù)打開一個文件,并指定“寫”操作
2. load:載入本地文件,恢復python對象
data = cPickle.load(open("test\\data.pkl","rb"))
同dump一樣,這里需要使用open函數(shù)打開本地的一個文件,并指定“讀”操作
3. dumps:將python對象序列化保存到一個字符串變量中
data_string = cPickle.dumps(data)
4. loads:從字符串變量中載入python對象
data = cPickle.loads(data_string)
5. pickle模塊使用的數(shù)據(jù)格式是python專用的,并且不同版本不向后兼容,同時也不能被其他語言說識別。要和其他語言交互,可以使用內(nèi)置的json包
使用pickle模塊你可以把Python對象直接保存到文件,而不需要把他們轉化為字符串,也不用底層的文件訪問操作把它們寫入到一個二進制文件里。 pickle模塊會創(chuàng)建一個python語言專用的二進制格式,你基本上不用考慮任何文件細節(jié),它會幫你干凈利落地完成讀寫獨享操作,唯一需要的只是一個合法的文件句柄。
pickle模塊中的兩個主要函數(shù)是dump()和load()。dump()函數(shù)接受一個文件句柄和一個數(shù)據(jù)對象作為參數(shù),把數(shù)據(jù)對象以特定的格式保存 到給定的文件中。當我們使用load()函數(shù)從文件中取出已保存的對象時,pickle知道如何恢復這些對象到它們本來的格式。
- dumps()函數(shù)執(zhí)行和dump() 函數(shù)相同的序列化。取代接受流對象并將序列化后的數(shù)據(jù)保存到磁盤文件,這個函數(shù)簡單的返回序列化的數(shù)據(jù)。
- loads()函數(shù)執(zhí)行和load() 函數(shù)一樣的反序列化。取代接受一個流對象并去文件讀取序列化后的數(shù)據(jù),它接受包含序列化后的數(shù)據(jù)的str對象, 直接返回的對象。
cPickle是pickle得一個更快得C語言編譯版本。
pickle和cPickle相當于java的序列化和反序列化操作
#! /usr/local/env python
# -*- coding=utf-8 -*-
if __name__ == "__main__":
import cPickle
#序列化到文件
obj = 123,"abcdedf",["ac",123],{"key":"value","key1":"value1"}
print obj
#輸出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})
#r+ 讀寫權限 r+b 讀寫到二進制文件
f = open(r"d:\a.txt","r+")
cPickle.dump(obj,f)
f.close()
f = open(r"d:\a.txt")
print cPickle.load(f)
#輸出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})
#序列化到內(nèi)存(字符串格式保存),然后對象可以以任何方式處理如通過網(wǎng)絡傳輸
obj1 = cPickle.dumps(obj)
print type(obj1)
#輸出:<type 'str'>
print obj1
#輸出:python專用的存儲格式
obj2 = cPickle.loads(obj1)
print type(obj2)
#輸出:<type 'tuple'>
print obj2
#輸出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
python-nmap實現(xiàn)python利用nmap進行掃描分析
Nmap是一個非常用的網(wǎng)絡/端口掃描工具,如果想將nmap集成進你的工具里,可以使用python-nmap這個python庫,它提供了一個簡單的接口來使用nmap進行掃描,下面我們來看看python-nmap的具體應用吧2024-12-12
Python 常用日期處理 -- calendar 與 dateutil 模塊的使用
這篇文章主要介紹了Python如何使用calendar 與 dateutil 模塊處理日期,幫助大家更好的理解和學習python,感興趣的朋友可以了解下2020-09-09
Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解
本文主要介紹了Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02
Python實現(xiàn)對比不同字體中的同一字符的顯示效果
這篇文章主要介紹了Python實現(xiàn)對比不同字體中的同一字符的顯示效果,也就是對比不同字體中某個字的顯示效果,這在做設計時非常有用,需要的朋友可以參考下2015-04-04
基于python,Matplotlib繪制函數(shù)的等高線與三維圖像
這篇文章主要介紹了基于python,Matplotlib繪制函數(shù)的等高線與三維圖像,函數(shù)的等高線及其三維圖像的可視化方法,下面一起來學習具體內(nèi)容吧,需要的小伙伴可以參考一下2022-01-01

