How to get a CRC32 in Hex in Python

Before I did this:

import zlib

def crc32(filename):
    return "%08x" %  zlib.crc32(file(filename, 'r').read())

But in python2.3 that gives a warning:

FutureWarning: %u/%o/%x/%X of negative int will return a signed string in Python 2.4 and up

So I changed it to:

import zlib, binascii, struct

def crc32(filename):
    bin = struct.pack('!l', zlib.crc32(file(filename, 'r').read()))
    return binascii.hexlify(bin)

I tested these two on a few thousand files and they seem to both have the exact same results.

#python