On 06/07/10 19:31, Richard Thomas wrote: > On Jun 7, 10:17 am, Peter Otten <__pete...@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? -- http://mail.python.org/mailman/listinfo/python-list