2010-11-05 52 views
1

通俗地說,什麼是「序列化」,爲什麼我需要它? 我讀過維基百科條目,但仍然不明白。 爲什麼我需要將數據轉換爲一系列位來存儲在一個文件中?我特別關心使用Python的pickle模塊進行序列化。Pickle Python序列化

謝謝你的時間!

回答

2

您可以保存(特定對象的)程序的狀態。想象一下,你有一個運行了幾個小時甚至幾天的程序。使用pickle你可以保存計算的狀態,如果你願意的話,可以殺掉程序並在稍後恢復計算。

您甚至可以將保存的對象發送給其他人,他們可以恢復計算或查看結果。

我有時會醃製userpreferences或(在測驗中)上次詢問哪些問題以及給出了什麼答案。

+0

你能定義「程序狀態」嗎?國家是什麼意思? @你的例子(我非常感謝):你的意思是循環例如運行1.000.000,我可以停在500.000,並恢復?是嗎? – MacPython 2010-11-05 13:54:03

+0

你可以安全的對象,你可以在你的例子中安全的櫃檯。發電機不可選。但是如果你想使用牛頓逼近逼近一個函數的零點,你可以保存你的最新結果,然後再次加載它來做另一個千周期。 – 2010-11-05 14:42:27

1

讓我嘗試用一​​些例子來解釋......

您需要通過字典來運行你的Python環境的(可能其他一些項目或一些其他機器)其他Python過程..

somelist = {1:1,2:2,3:3} 

你怎麼能通過這個字典到這個過程?你無法將其轉換爲字符串,即使你做到了,你不能將其轉換回其原來的形式...

如果醃製這本字典,它會給你

dumps({1: 1, 2: 2, 3: 3}) 
'(dp1\nI1\nI1\nsI2\nI2\nsI3\nI3\ns.' 

其中有繩子狀結構......所以,你可以通過郵寄,或者其他什麼東西送這個......和接收器可以unpickle它來獲取原始對象...

loads('(dp1\nI1\nI1\nsI2\nI2\nsI3\nI3\ns.') 
{1: 1, 2: 2, 3: 3} 
+0

對於這個任務'json','yaml'或'xml'可能是一個更好的選擇:不是python特有的,它們可以用任何現代計算機語言閱讀。 json/yaml具有人類可讀性更好的優勢,而xml可能更適合複雜結構。 JSON和XML庫附帶Python標準分發。 – 2015-03-23 05:40:10

0

產生一些統計數據,但沒有太多的程序它使得使用數據庫是矯枉過正。

例如,基準程序選擇最佳算法。

完成後繪製一張圖。現在你可能不喜歡圖的繪製方式。您可以醃製結果,然後在另一個腳本中取消選擇(也許在執行幾個後續基準測試後),並根據需要微調可視化。