久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

自學Python教程【第六十三節】pickle

同學們!歡迎大家來到自學Python教程教室,上一講我們分享了關于在哪里些Python的問題——Python shell,這節課我們學習pickle的相關內容。

在之前的課程中,我們有講到通過文件來保存、中轉數據(參見第29、30、31課)。在使用文件存儲時,通常需要對數據進行一些處理,按照一定的規范把數據整理成文本,再寫入文件中。下次使用時,從文件中讀出文本,再按照此規范解析這些數據。

這種將數據轉成文本的過程又被稱為“序列化”,即將對象狀態轉換為可保持或傳輸的格式的過程。對應的,從序列化的格式中解析對象狀態的過程被稱為“反序列化”。

在之前的課程和示例中,我們都自己手動實現了這個過程。其實 Python 提供了一個標準模塊來做這件事,就是 pickle。它可以把任何 Python 對象存儲在文件中,再把它原樣取出來。

來看一下存儲的過程:

import pickle 
test_data = ['Save me!', 123.456, True]
f = file('test.data', 'w')
pickle.dump(test_data, f)
f.close()

這樣,我們就把 test_data 這個 list 存儲在了文件 test.data 中。你可以用文本編輯器打開 test.data 查看里面的內容:

(lp0 
S'Save me!'
p1
aF123.456
aI01
a.

這就是經 pickle 序列化后的數據,隱約可以看到之前對象的影子。你可能無法看出這個文件的規律,這沒關系,Python 能看懂就可以了。

下面取存儲的過程:

import pickle 
f = file('test.data')
test_data = pickle.load(f)
f.close()
print test_data

控制臺的輸出:

['Save me!', 123.456, True]

和存儲前的數據是一致的。

如果你想保存多個對象,一種方法是把這些對象先全部放在一個序列中,在對這個序列進行存儲:

a = 123 
b = "hello"
c = 0.618
data = (a, b, c)
...
pickle.dump(data, f)

另一種方法就是依次保存和提?。?/p>

...

pickle.dump(a, f)

pickle.dump(b, f)

pickle.dump(c, f)

...

x = pickle.load(f)

y = pickle.load(f)

z = pickle.load(f)

dump 方法可以增加一個可選的參數,來指定用二進制來存儲:

pickle.dump(data, f, True)

而 load 方法會自動檢測數據是二進制還是文本格式,無需手動指定。

Python 還提供了另一個模塊 cPickle,它的功能及用法和 pickle 模塊完全相同,只不過它是用C語言編寫的,因此要快得多(比pickle快1000倍)。因此你可以把上述代碼中的 pickle 全部替換為 cPickle,從而提高運行速度(盡管在這個小程序中影響微乎其微)。

好啦,今天的分享到這里就結束了,希望大家能夠持續關注馬哥教育官網,每天都會有大量優質內容與大家分享歐!免責聲明:內容和圖片源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

聲明:文章來源于網絡,侵刪!

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 肥乡县| 鹤壁市| 景宁| 收藏| 广德县| 景谷| 吉林省| 安阳县| 古浪县| 封丘县| 宜州市| 南涧| 青田县| 清新县| 上饶市| 沭阳县| 珲春市| 定安县| 绍兴市| 萨迦县| 江山市| 渭源县| 阜南县| 东辽县| 林周县| 镶黄旗| 浮梁县| 陇西县| 化德县| 长汀县| 浦县| 舞阳县| 崇阳县| 新乡县| 兴仁县| 乐平市| 石景山区| 精河县| 定结县| 抚松县| 万宁市|