Preferowane (lub najbardziej popularne) rozszerzenie pliku dla Pythona

85

Czasami widziałem .pickle, .pck, .pcl, i .dbdla plików, które zawierają ogórki Python, ale jestem pewien, co jest najczęstszym i najlepszych praktyk. Wiem, że ostatnie trzy rozszerzenia są również używane do innych rzeczy.

Powiązane pytanie brzmi: Jaki typ MIME jest preferowany do wysyłania pikli między systemami za pomocą REST API?

Raymond Hettinger
źródło
4
Zabawne jest to, że na pewno kiedyś użyłem .pkl.
idjaw
2
Z jakiegoś powodu nie ma tego w dokumencie Python 3, ale w dokumencie Python 2 i określono pkl-> docs.python.org/2/library/pickle.html#example
idjaw
4
O ile to możliwe, unikaj marynaty. Jest powód, dla którego lekarze ostrzegają przed używaniem marynaty - nie jest to bezpieczne, nigdy nie było bezpieczne i nigdy nie będzie bezpieczne. Zamiast tego użyj modułu JSON.
KingRadical
@KingRadical czy mógłbyś podać jakieś alternatywy?
Rafa Nogales,
1
@RafaNogales msgpack wydaje się dobrą alternatywą binarną pypi.org/project/u-msgpack-python
giuliano-oliveira

Odpowiedzi:

98

Python 2

Z dokumentacji Pythona 2 podczas serializacji (czyli zapisu do pliku pikle) użyj:

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

Wybrałbym .pkljako rozszerzenie podczas korzystania z Pythona 2.

Python 3

Przykład w dokumentacji Pythona 3 używa teraz .picklejako rozszerzenia pliku do serializacji:

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

Typ MIME preferowany do wysyłania pikli z komentarza martineau poniżej:

aplikacja / strumień oktetu

Zobacz Jaki jest „typ zawartości” HTTP, który ma być używany dla obiektu blob bajtów?

Teoretyczny
źródło
text/plainmoże nie działać w zależności od używanego protokołu pikle - wersja protokołu 0 jest jedynym, który jest ASCII.
martineau
2
To powiedziawszy, myślę, że application/octet-streambyłoby lepiej niezależnie od protokołu - zobacz pytanie Jaki jest „typ zawartości” HTTP, który ma być używany dla blobu bajtów?
martineau