In the end, I used a cStringIO object to store the chromosomes - because there are only 23, I can use one character for each chromosome and represent the whole lot with a giant string and a dictionary to say what each character means. Then I used numpy arrays for the data and coordinates. This squeezed each file into under 100MB.
Thanks again for the help! Peter -- http://mail.python.org/mailman/listinfo/python-list