Search the archives!
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
How to Read Bytes from a file
- From: aleax at mac.com (Alex Martelli)
- Subject: How to Read Bytes from a file
- Date: Wed, 28 Feb 2007 23:00:26 -0800
gregpinero at gmail.com <gregpinero at gmail.com> wrote:
> It seems like this would be easy but I'm drawing a blank.
>
> What I want to do is be able to open any file in binary mode, and read
> in one byte (8 bits) at a time and then count the number of 1 bits in
> that byte.
>
> I got as far as this but it is giving me strings and I'm not sure how
> to accurately get to the byte/bit level.
>
> f1=file('somefile','rb')
> while 1:
> abyte=f1.read(1)
You should probaby prepare before the loop a mapping from char to number
of 1 bits in that char:
m = {}
for c in range(256):
m[c] = countones(c)
and then sum up the values of m[abyte] into a running total (break from
the loop when 'not abyte', i.e. you're reading 0 bytes even though
asking for 1 -- that tells you the fine is finished, remember to close
it).
A trivial way to do the countones function:
def countones(x):
assert x>=0
c = 0
while x:
c += (x&1)
x >>= 1
return c
you just don't want to call it too often, whence the previous advice to
call it just 256 times to prep a mapping.
If you download and install gmpy you can use gmpy.popcount as a fast
implementation of countones:-).
Alex
- Follow-Ups:
- How to Read Bytes from a file
- From: Leif K-Brooks
- How to Read Bytes from a file
- References:
- How to Read Bytes from a file
- From: gregpinero at gmail.com
- How to Read Bytes from a file
- Prev by Date: How to Read Bytes from a file
- Next by Date: Reading csv files using SQL
- Previous by thread: How to Read Bytes from a file
- Next by thread: How to Read Bytes from a file
- Index(es):