> > I've been working with the tarfile module and just noticed an > > apparent flaw in my own logic. I wanted to add files to the tar > > until it neared a certain file size. After every addition I would > > use os.path.getsize(). What I noticed today is that I could add a > > file to the tar without the tar's size changing. I'm assuming that > > because the TarFile object is not closed, finding its size that way > > isn't reliable. > > > > The first thing I tried was using flush(), but TarFile objects > > apparently don't do that. I also can't close the object and reopen > > it for appending because TarFile objects can't append if the tar is > > compressed. And finally, I can't predict the compression ratio, so > > I can't merely keep track of the size of the individual files > > without a huge gap to my target size. > > > > I'm giving up on it for the night. Anyone have any thoughts? > > Something to try, just from looking at the docs and the code: > > You can open the output file yourself and pass it to tarfile.open(). > Then you could use f.tell() to get an idea how many bytes have been > written. The file-like object being used by the tarfile is stored in > its fileobj attribute so maybe you can flush that before the tell(). > > HTH, > Kent
That's a brilliant thought. I played with it, and it does seem to give me a more accurate report; in the end, though, it's still not exact. Oh well. For now I'm just putting in a "buffer" and assuming that the archive is 1M larger than whatever it tells me. That seems to keep it from going over at the cost of having a little space that could have been used otherwise. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor