Escribiendo una cadena ASCII como binario en python

Tengo una cadena ASCII = “abcdefghijk”. Quiero escribir esto en un archivo binario en formato binario usando python.

Traté de seguir:

str = "abcdefghijk" fp = file("test.bin", "wb") hexStr = "".join( (("\\x%s") % (x.encode("hex"))) for x in str) fp.write(hexStr) fp.close() 

Sin embargo, cuando abro el test.bin veo lo siguiente en formato ascii en lugar de binario.

 \x61\x62\x63\x64\x65\x66\x67 

Lo entiendo porque aquí hay dos barras inclinadas (“\\ x% s”). ¿Cómo podría resolver este problema? Gracias por adelantado.

Actualización:

    Lo siguiente me da el resultado esperado:

     file = open("test.bin", "wb") file.write("\x61\x62\x63\x64\x65\x66\x67") file.close() 

    Pero, ¿cómo logro esto con la cadena ASCII “abcdef”? ?

    Has malinterpretado lo que hace \xhh en las cadenas de Python. Usar la notación \x en cadenas de Python es solo una syntax para producir ciertos puntos de código.

    Puede usar '\x61' para producir una cadena, o puede usar 'a' ; ambas son solo dos maneras de decir ” dame una cadena con un carácter con un valor hexadecimal 61, por ejemplo, a carácter ASCII :

     >>> '\x61' 'a' >>> 'a' 'a' >>> 'a' == '\x61' True 

    La syntax de \xhh entonces, no es el valor ; no hay \ y no x y no hay 6 y 1 carácter en el resultado final.

    Solo debes escribir tu cadena :

     somestring = 'abcd' with open("test.bin", "wb") as file: file.write(somestring) 

    No hay nada mágico en los archivos binarios; la única diferencia con un archivo abierto en modo de texto es que un archivo binario no traducirá automáticamente las nuevas líneas al estándar separador de línea para su plataforma; Por ejemplo, en Windows, escribir \n produce \r\n lugar.

    Ciertamente, no tiene que producir escapes hexadecimales para escribir datos binarios.

    En Python 3, las cadenas son datos Unicode y no se pueden escribir en un archivo sin encoding, pero en Python el tipo str ya está codificado en bytes. Así que en Python 3 usarías:

     somestring = 'abcd' with open("test.bin", "wb") as file: file.write(somestring.encode('ascii')) 

    o utilizarías un literal de cadena de bytes; b'abcd' .

    Creo que no necesariamente entiendes qué es binario / ascii … todos los archivos son binarios en el sentido de que son solo bits. ascii es solo una representación de algunos bits … 99.9999% de los editores de archivos mostrarán sus bits como ascii si pueden, y si no hay otra encoding declarada en el propio archivo …

     fp.write("abcd") 

    es exactamente igual a

     fp.write("\x61\x62\x63\x64")