estoy tratando de aprender a utilizar el módulo pickle
en Python:Uso de pickle.dump en Python
import pickle
x = 123
f = open('data.txt','w')
pickle.dump(x,f)
Esto es lo que me sale:
Traceback (most recent call last):
File "D:\python\test.py", line 5, in <module>
pickle.dump(x,f)
TypeError: must be str, not bytes
Sin embargo, este código funciona igual fina:
import pickle
dump = pickle.dump(123)
print(dump)
¿Qué estoy haciendo mal?
Sólo algo vale la pena mencionar: para todos los modos de archivo en Python, se debe añadir un ' 'b'' al final de la cadena, incluso si es sólo '' rb'' , ya que es plataforma independiente. – Edwin
@Edwin: No hace transliteraciones de línea nueva específicas de plataforma, pero en 3.x hay una diferencia importante: los archivos abiertos en modo binario manejan solo bytes, los archivos abiertos en modo texto manejan solo texto ("unicode"). Si bien el modo binario ciertamente tiene sentido para los datos binarios, y el modo de texto puede no aplicarse en algunos otros casos, su sugerencia es demasiado general. Si acaba de decodificar los bytes a texto, la apertura en modo binario generalmente no tiene sentido. Es más fácil y más sólido dejar que Python maneje eso, y es mejor adivinar las codificaciones que las codificaciones de codificación. – delnan
@delnan Ah, vale; Acabo de recordar leer eso en algún lugar del sitio de python.org. – Edwin