Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

File extension naming: .p vs .pkl vs .pickle

Tags:

When reading and writing pickle files, I've noticed that some snippets use .p others .pkl and some the full .pickle. Is there one most pythonic way of doing this?

My current view is that there is no one right answer, and that any of these will suffice. In fact, writing a filename of awesome.pkl or awesome.sauce won't make a difference when running pickle.load(open(filename, "rb")). This is to say, the file extension is just a convention which doesn't actually affect the underlying data. Is that right?

Bonus: What if I saved a PNG image as myimage.jpg? What havoc would that create?

like image 343
derekchen14 Avatar asked Feb 12 '17 22:02

derekchen14


1 Answers

The extension makes no difference because "The Pickle Protocol" runs every time.

That is to say whenever pickle.dumps or pickle.loads is run the objects are serialized/un-serialized according to the pickle protocol.

(The pickle protocol is a serialization format)

The pickle protocol is python specific(and there are several versions). It's only really designed for a user to re-use data themselves -> if you sent the pickled file to someone else who happened to have a different version of pickle/Python then the file might not load correctly and you probably can't do anything useful with that pickled file in another language like Java.

So, use what extensions you like because the pickler will ignore them.

JSON is another more popular way of serializing data, it can also be used by other languages unlike pickle - however it does not cater directly to python and so certain variable types are not understood by it :/

source if you want to read more

EDIT: while you could use any name, what should you use?

  • 1 As mentioned by @Mike Williamson .pickle is used in the pickle docs

  • 2 The python standard library json module loads files named with a .json extension. So it would follow the the pickle module would load a .pickle extension.

  • 3 Using .pickle would also minimise any chance of accidental use by other programs.

.p extensions are used by some other programs, most notably MATLAB as the suffix for binary run-time files[sources: one, two]. Some risk of conflict

.pkl is used by some obscure windows "Migration Wizard Packing List file"[ source]. Incredibly low risk of conflict.

.pickle is only used for python pickling[source]. No risk of conflict.

like image 89
Harry de winton Avatar answered Sep 21 '22 09:09

Harry de winton