Bevorzugte (oder häufigste) Dateierweiterung für eine Python-Pickle

81

Manchmal habe ich gesehen .pickle, .pck, .pcl, und .dbfür Dateien , die Python Gurken enthalten, aber ich bin nicht sicher , was ist die häufigste oder Best Practice. Ich weiß, dass die letzten drei Erweiterungen auch für andere Dinge verwendet werden.

Die verwandte Frage lautet: Welcher MIME-Typ wird für das Senden von Pickles zwischen Systemen mithilfe einer REST-API bevorzugt?

Raymond Hettinger
quelle
3
Was lustig ist, ist, dass ich sicher einmal .pkl verwendet habe.
Idjaw
2
Aus irgendeinem Grund ist dies nicht im Python 3-Dokument, sondern im Python 2-Dokument und unter Angabe von pkl-> docs.python.org/2/library/pickle.html#example
idjaw
4
Vermeiden Sie nach Möglichkeit Gurken. Es gibt einen Grund, warum die Dokumente vor der Verwendung von Gurke warnen - es ist nicht sicher, es war nie sicher und es wird niemals sicher sein. Verwenden Sie stattdessen das JSON-Modul.
KingRadical
@KingRadical könnten Sie einige Alternativen geben?
Rafa Nogales
1
@ RafaNogales msgpack scheint eine gute binäre Alternative zu sein pypi.org/project/u-msgpack-python
giuliano-olivira

Antworten:

90

Python 2

Verwenden Sie in der Python 2-Dokumentation beim Serialisieren (dh Schreiben in eine Pickle-Datei) Folgendes:

output = open('data.pkl', 'wb')

Ich würde .pklals Erweiterung wählen, wenn ich Python 2 verwende.

Python 3

Das Beispiel in der Python 3-Dokumentation wird jetzt .pickleals Dateierweiterung für die Serialisierung verwendet:

with open('data.pickle', 'wb') as f:
    pickle.dump(...)

Der MIME-Typ, der für das Versenden von Gurken aus Martineaus Kommentar unten bevorzugt wird:

Anwendung / Oktett-Stream

Siehe Was ist der HTTP- "Inhaltstyp", der für einen Byte-Blob verwendet werden soll?

Theoretisch
quelle
text/plainAbhängig vom verwendeten Pickle-Protokoll funktioniert es möglicherweise nicht - Protokollversion 0 ist die einzige, die ASCII-fähig ist.
Martineau
2
Trotzdem denke ich, application/octet-streamdass es unabhängig vom Protokoll besser wäre - siehe Frage Was ist der HTTP-Inhaltstyp, der für einen Blob-Byte verwendet werden soll?
Martineau