textiowrapper read open libreria fileio python file-io byte

read - ¿Cómo leer un byte de archivo por byte en Python y cómo imprimir un bytelist como un binario?



python modulo io (5)

El código que has mostrado leerá 8 bytes . Podrías usar

with open(filename, ''rb'') as f: while 1: byte_s = f.read(1) if not byte_s: break byte = byte_s[0] ...

Intento leer un byte de archivo por byte, pero no estoy seguro de cómo hacerlo. Estoy tratando de hacerlo así:

file = open(filename, ''rb'') while 1: byte = file.read(8) # Do something...

Entonces, ¿eso hace que el byte variable contenga 8 próximos bits al comienzo de cada ciclo? No importa qué son realmente esos bytes. Lo único que importa es que necesito leer un archivo en pilas de 8 bits.

EDITAR:

También recopilé esos bytes en una lista y me gustaría imprimirlos para que no se impriman como caracteres ASCII, sino como bytes sin formato, es decir, cuando imprimo ese bytel me da el resultado como

[''10010101'', ''00011100'', .... ]


Hay un módulo de python especialmente diseñado para leer y escribir desde y hacia datos codificados binarios llamados '' struct ''. Como las versiones de Python en 2.6 no admiten str.format, se debe usar un método personalizado para crear cadenas con formato binario.

import struct # binary string def bstr(n): # n in range 0-255 return ''''.join([str(n >> x & 1) for x in (7,6,5,4,3,2,1,0)]) # read file into an array of binary formatted strings. def read_binary(path): f = open(path,''rb'') binlist = [] while True: bin = struct.unpack(''B'',f.read(1))[0] # B stands for unsigned char (8 bits) if not bin: break strBin = bstr(bin) binlist.append(strBin) return binlist


Para leer un byte:

file.read(1)

8 bits es un byte.


Para responder la segunda parte de su pregunta, para convertir a binario puede usar una cadena de formato y la función ord :

>>> byte = ''a'' >>> ''{0:08b}''.format(ord(byte)) ''01100001''

Tenga en cuenta que el formato se ajusta con el número correcto de ceros a la izquierda, lo que parece ser su requisito. Este método necesita Python 2.6 o posterior.


Tarde en la fiesta, pero esto puede ayudar a cualquiera que busque una solución rápida:

puedes usar bin(ord(''b'')).replace(''b'', '''') bin () te da la representación binaria con una ''b'' después del último bit, tienes que eliminarlo. También ord () le proporciona el número ASCII para el carácter de caracteres o código de 8 bits / 1 byte.

Aclamaciones