Reading file bit by bit

Lie Ryan lie.1296 at gmail.com
Mon Jun 7 06:20:29 EDT 2010


On 06/07/10 19:31, Richard Thomas wrote:
> On Jun 7, 10:17 am, Peter Otten <__pete... at web.de> wrote:
>> Alfred Bovin wrote:
>>> I'm working on something where I need to read a (binary) file bit by bit
>>> and do something depending on whether the bit is 0 or 1.
>>
>>> Any help on doing the actual file reading is appreciated.
>>
>> The logical unit in which files are written is the byte. You can split the
>> bytes into 8 bits...
>>
>>>>> def bits(f):
>>
>> ...     while True:
>> ...             b = f.read(1)
>> ...             if not b: break
>> ...             b = ord(b)
>> ...             for i in range(8):
>> ...                     yield b & 1
>> ...                     b >>= 1
>> ...>>> with open("tmp.dat", "wb") as f: # create a file with some example data
>>
>> ...     f.write(chr(0b11001010)+chr(0b10101111))>>> with open("tmp.dat", "rb") as f:
>>
>> ...     for bit in bits(f):
>> ...             print bit
>> ...
>> 0
>> 1
>> 0
>> 1
>> 0
>> 0
>> 1
>> 1
>> 1
>> 1
>> 1
>> 1
>> 0
>> 1
>> 0
>> 1
>>
>> but that's a very inefficient approach. If you explain what you are planning
>> to do we can most certainly come up with a better alternative.
>>
>> Peter
> 
> You're reading those bits backwards. You want to read the most
> significant bit of each byte first...

Of course that depends on the need of the OP?



More information about the Python-list mailing list