2012-12-18 85 views
15

有沒有任何方法檢查文件是否由pickle創建?我只能捕獲由pickle.load引發的異常,但沒有特定的「不是pickle文件」異常。如何測試一個文件是否已被pickle創建?

+9

檢查醋和蒔蘿的痕跡 –

+0

您是否擔心文件是否已經*創建*當您使用'pickle.dump'時,或者當您使用'pickle.load'時是否存在文件?無論哪種情況,當你打開輸出或輸入的文件句柄時,錯誤都會發生,而不是在實際的'pickle'行中。 –

+0

我並不擔心文件是否存在,而是關於是否存在的文件是由'pickle'創建的。 – Erik

回答

8

Pickle文件沒有標題,所以沒有標準的方法來標識它們,但是沒有試圖解除其中的一個,並且看到在這樣做時是否引發了任何異常。

您可以通過在pickle模塊中繼承Pickler()Unpickler()類的子類來定義自己的增強型協議,該協議包含某種類型的標頭。然而這不能用快得多的cPickle模塊來完成,因爲其中有工廠功能,不能被子類化[1]

一個更靈活的方法是定義您自己的獨立類,它們使用相應的Pickler()Unpickler()實例。

更新

所有泡菜文件的最後一個字節應該是pickle.STOP操作碼,所以雖然沒有一個頭,有實際上是一個很小的拖車這將是一個相對簡單的事情檢查。

根據您的具體使用情況,您也許能逃脫補充,隨着醃製的對象的代表性的東西,因爲過去的STOP操作碼的任何數據更詳盡被忽略[2]

[1]     Python的2文件中 Footnote [2]
[2]     pickle.loads()的文檔,這也適用於 pickle.load(),因爲它目前以後者的形式實施。
7

除了嘗試去除它並捕獲異常外,沒有其他方法可行。

相關問題