Extensión de archivo preferida (o más común) para un pepinillo de Python

81

A veces, he visto .pickle, .pck, .pcl, y .dbpara los archivos que contienen las salmueras de Python, pero estoy seguro de lo que es el más común o mejores prácticas. Sé que las últimas tres extensiones también se utilizan para otras cosas.

La pregunta relacionada es: ¿Qué tipo de MIME se prefiere para enviar pickles entre sistemas usando una API REST?

Raymond Hettinger
fuente
3
Lo gracioso es que estoy seguro de que alguna vez usé .pkl.
idjaw
2
Por alguna razón, esto no está en el documento de Python 3, sino en el documento de Python 2 y especifica pkl-> docs.python.org/2/library/pickle.html#example
idjaw
4
Evite los encurtidos siempre que sea posible. Hay una razón por la que los médicos advierten contra el uso de pepinillos: no es seguro, nunca ha sido seguro y nunca estará seguro. En su lugar, use el módulo json.
KingRadical
@KingRadical, ¿podrías dar algunas alternativas?
Rafa Nogales
1
@RafaNogales msgpack parece una buena alternativa binaria pypi.org/project/u-msgpack-python
giuliano-oliveira

Respuestas:

90

Python 2

De la documentación de Python 2 , mientras serializa (es decir, escribe en un archivo pickle), use:

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

Elegiría .pklcomo extensión cuando use Python 2.

Python 3

El ejemplo de la documentación de Python 3 ahora se usa .picklecomo extensión de archivo para la serialización:

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

El tipo MIME preferido para enviar encurtidos del comentario de martineau a continuación:

aplicación / flujo de octetos

Consulte ¿Qué es el "tipo de contenido" HTTP que se debe usar para un blob de bytes?

Teórico
fuente
text/plainEs posible que no funcione según el protocolo pickle que se utilice; la versión 0 del protocolo es la única que es ASCII.
Martineau
2
Dicho esto, creo application/octet-streamque sería mejor independientemente del protocolo; consulte la pregunta ¿Cuál es el "tipo de contenido" HTTP que se debe usar para una gota de bytes?
Martineau