Python Escribir bytes en el archivo

143

Tengo una función que devuelve una cadena. La cadena contiene retornos de carro y nuevos saltos de línea (0x0D, 0x0A). Sin embargo, cuando escribo en un archivo, contiene solo los nuevos avances de línea. ¿Hay alguna manera de hacer que la salida incluya el retorno de carro y el nuevo avance de línea?

msg = function(arg1, arg2, arg3)
f = open('/tmp/output', 'w')
f.write(msg)
f.close()
Blackninja543
fuente
tener una lectura defile.__doc__
wim

Respuestas:

257

Si desea escribir bytes, debe abrir el archivo en modo binario.

f = open('/tmp/output', 'wb')
Ignacio Vazquez-Abrams
fuente
8
Dado que OP parece estar usando una plataforma que no es Windows, esto solo funciona en Py3. En Py2, necesitarías usar io.open.
lvc
2
Creo que esto es un error en Python, dado que Python puede detectar tipos de datos en tiempo de ejecución y puede detectar entre entrada binaria y de texto, creo que debería solucionarse en Python, ¿por qué cientos de personas terminan en esta página? podría haber sido evitado por una declaración if en el python stdlib, votar si está de acuerdo, votarme si olvido si es necesario.
Felipe Valdés
2
@FelipeValdes desafortunadamente, eso podría introducir sorpresas al escribir contenido si alguna vez se detecta incorrectamente. Aún más molesto, esa detección incorrecta solo puede ocurrir en ciertos casos extraños que se vuelven sorprendentes y difíciles de rastrear. En cambio, confiar en el comportamiento explícito, incluso si eso significa que tenemos esta pregunta, asegura que pueda tener certeza en la forma en que IO se comporta en diferentes escenarios.
Liam Dawson
1
¿Qué extensión tendrían los archivos de bytes?
chia yongkang
@FelipeValdes se relaciona con el principio de menor sorpresa / asombro ( en.wikipedia.org/wiki/Principle_of_least_astonishment ). Su método se llamaría más acertadamente:open_and_detect_file_type()
henrycjc