天天看點

Python pickle子產品

python的pickle子產品實作了基本的資料序列和反序列化。通過pickle子產品的序列化操作我們能夠将程式中運作的對象資訊儲存到檔案中去,永久存儲;通過pickle子產品的反序列化操作,我們能夠從檔案中建立上一次程式儲存的對象。

Pickle子產品中最常用的函數為: dump、dumps、load、loads

(1)pickle.dump(obj, file, [,protocol])

函數的功能:将obj對象序列化存入已經打開的file中。

參數講解:

obj:想要序列化的obj對象。

file:檔案名稱,是一個帶有寫權限的檔案對象,如果protocol>=1, file需要以二進制(wb)形式操作。

protocol:序列化使用的協定。如果該項省略,則預設為0。如果為負值或HIGHEST_PROTOCOL,則使用最高的協定版本。

(2)pickle.load(file)

函數的功能:将file中的對象序列化讀出。

file:檔案名稱,是一個帶有讀權限的檔案對象,如果protocol>=1, file需要以二進制(rb)形式操作

(3)pickle.dumps(obj[, protocol])

函數的功能:将obj對象序列化為string形式,而不是存入檔案中。

protocal:如果該項省略,則預設為0。如果為負值或HIGHEST_PROTOCOL,則使用最高的協定版本。

(4)pickle.loads(string)

函數的功能:從string中讀出序列化前的obj對象。

string:檔案名稱。

【注】 dump() 與 load() 相比 dumps() 和 loads() 還有另一種能力:dump()函數能一個接着一個地将幾個對象序列化存儲到同一個檔案中,随後調用load()來以同樣的順序反序列化讀出這些對象。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/12/26 0026 15:18
# @Author  : ming
__author__ = 'ming'
# pickle子產品主要函數的應用舉例
import pickle
DataList = [
    ["yang", 20, '6873264382'],
    ["ming", 32, '7298349832'],
    ["coke", 14, '2937972439'],
]
DataDic = {
    "A": [1, 2, 3, 4, ],
    "B": ('hello', 'world',),
    "C": {'my': 'yes', 'you': 'no'}
}

# 使用dump()将資料序列化到檔案中
fo = open('File.txt', 'wb')
pickle.dump(DataList, fo, -1)
pickle.dump(DataDic, fo)
fo.close()

# 使用load()将資料從檔案中序列化讀出
fo = open('File.txt', 'rb')
data1 = pickle.load(fo)
print(data1)
data2 = pickle.load(fo)
print(data2)
fo.close()

# 使用dumps()和loads()舉例
p = pickle.dumps(DataList)
print(pickle.loads(p))
p = pickle.dumps(DataDic)
print(pickle.loads(p))      
[['yang', 20, '6873264382'], ['ming', 32, '7298349832'], ['coke', 14, '2937972439']]
{'A': [1, 2, 3, 4], 'C': {'my': 'yes', 'you': 'no'}, 'B': ('hello', 'world')}
[['yang', 20, '6873264382'], ['ming', 32, '7298349832'], ['coke', 14, '2937972439']]
{'A': [1, 2, 3, 4], 'C': {'my': 'yes', 'you': 'no'}, 'B': ('hello', 'world')}      
Python pickle子產品

作者:楊永明

出處:https://www.cnblogs.com/ming5218/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。