Попробуйте использовать тип bytearray
(Python 2.6 и более поздние версии), он гораздо лучше подходит для работы с байтовыми данными.Ваш блок try
будет просто:
ba = bytearray(fh.read())
for byte in ba:
print byte & 1
или для создания списка результатов:
low_bit_list = [byte & 1 for byte in bytearray(fh.read())]
Это работает, потому что когда вы индексируете bytearray
, вы просто возвращаетецелое число (0-255), тогда как, если вы просто читаете байт из файла, вы возвращаете одну строку символов и поэтому должны использовать ord
для преобразования ее в целое число.
Если ваш файл слишком большой, чтобы его можно было удобно хранить в памяти (хотя я предполагаю, что это не так), тогда mmap
можно использовать для создания bytearray
из буфера:
import mmap
m = mmap.mmap(fh.fileno(), 0, access=mmap.ACCESS_READ)
ba = bytearray(m)