2017-02-12 61 views
4

閱讀和寫作泡菜文件時,我注意到有些代碼片段使用.p其他.pkl和一些完整的.pickle。有沒有一個最pythonic這樣做?文件擴展命名:.p vs .pkl vs .pickle

我目前的觀點是沒有一個正確的答案,而且其中任何一個都足夠了。實際上,在運行pickle.load(open(filename, "rb"))時,寫入awesome.pklawesome.sauce的文件名不會有什麼區別。這就是說,文件擴展名只是一個實際上並未影響底層數據的約定。是對的嗎?

獎勵:如果我救了一個PNG圖像myimage.jpg?會造成什麼破壞?

回答

2

擴展使得沒有區別因爲「泡椒協議」運行每次。根據pickle協議

也就是說每當pickle.dumps或pickle.loads運行的對象被序列化/非串行化。

(pickle協議是一個序列化格式

pickle協議是特定蟒(也有幾個版本)。它是唯一真正專爲用戶重新使用數據本身 - >如果您發送的醃文件給別人誰碰巧有泡菜的不同版/ Python的那麼該文件可能無法正確加載,你大概可以在Java等另一種語言中對該pickle文件做任何有用的操作。

那麼,用什麼擴展你喜歡,因爲皮克勒忽略他們。

JSON是串行化的數據的另一個更普遍的方式,它也可以通過不同於泡菜語言中使用 - 但是它不直接迎合蟒等某些變量類型不被它的理解:/

source如果你想閱讀更多