Take a look at the pywin32 extension, which I believe has some lower level memory allocation and file capabilities that might help you in this situation. If I'm completely wrong, someone please tell me XD. Of course, you could just make the read() a step process, reading, O lets say 8192 bytes at a time (could be bigger if u want), writes them to the new file, and then reads the next portion. This will be slower (not sure how much) than if you had some AMD X2 64 with 3 gigs of ram and could just read the file all at once, but it should work.
-- http://mail.python.org/mailman/listinfo/python-list