Yeah, I could certainly see how that would be a problem. For convenience it sets the body into an attribute on the file object, and since all the file objects would still be in scope throughout (and after) the loop, it all comes crashing down.
I think you should be able to get what you need if you change the inside of the loop to this:
directory.files.get(aws_file.key).body
That is more or less what the body method would normally do anyway, except you are then accessing it in such a way that it should fall out of scope at the end of the loop, which should allow it to be garbage collected.
Hope that helps, but do let me know if you have further questions.
Thanks!
wes