¿Cómo escribir bytes en un archivo?

3 minutos de lectura

avatar de usuario
negroninja543

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

msg = function(arg1, arg2, arg3)
f = open('/tmp/output', 'w')
f.write(msg)
f.close()

  • tener una lectura de file.__doc__

    – Wim

    23 de agosto de 2012 a las 13:23

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

f = open('/tmp/output', 'wb')

  • 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

    23 de agosto de 2012 a las 13:32

  • 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 corregirse en python, ¿por qué cientos de personas terminan en esta página, si podría haberse evitado con una declaración if en python stdlib, vota a favor si estás de acuerdo, vota en contra si es necesario.

    – Felipe Valdés

    21 de junio de 2018 a las 21:23


  • @FelipeValdes desafortunadamente, eso podría traer sorpresas al escribir contenido si alguna vez se detectara incorrectamente. Aún más molesto, esa detección incorrecta solo podría ocurrir en ciertos casos extremos extraños que se vuelven sorprendentes y difíciles de rastrear. Confiar en el comportamiento explícito en su lugar, incluso si eso significa que tenemos esta pregunta, asegura que puedo tener certeza en la forma en que IO se comporta en diferentes escenarios.

    –Liam Dawson

    1 de julio de 2018 a las 3:22

  • ¿Qué extensión tendrían los archivos de bytes?

    – chia yongkang

    11 de mayo de 2020 a las 8:48

  • @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

    2 de junio de 2020 a las 4:35

avatar de usuario
yaya

Escriba bytes y cree el archivo si no existe:

f = open('./put/your/path/here.png', 'wb')
f.write(data)
f.close()

wb significa abrir el archivo en write binary modo.

  • fue capaz de crear el archivo (nuevo) sin el + valor en wb+ como se menciona en tu respuesta. Así que solo ejecuta, python with open('data.csv', 'wb') as file_obj: file_obj.write(csv_data) Según la ayuda (abierta) en los documentos REPL y python Py3.7#lectura y escritura de archivos

    – Isaac Felipe

    16 de septiembre de 2020 a las 6:56


  • @IsaacPhilip también me funciona sin +, así que actualicé la respuesta.

    – yaya

    16 de septiembre de 2020 a las 12:15

avatar de usuario
Étienne Salimbeni

Aquí hay solo una versión “más limpia” con with :

with open(filename, 'wb') as f: 
    f.write(filebytes)

  • Mejores prácticas con with ya que el objeto de archivo se cierra automáticamente.

    – questionto42standswithUkraine

    29 de marzo a las 21:43


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad