Extracting file from zip archive in Python 2.6.1

Brandon Taylor btaylordesign at gmail.com
Thu Feb 5 16:47:09 EST 2009


On Feb 4, 12:16 am, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Wed, 04 Feb 2009 00:36:40 -0200, Brandon Taylor  
> <btaylordes... at gmail.com> escribió:
>
>
>
> > On Feb 3, 1:16 pm, Brandon Taylor <btaylordes... at gmail.com> wrote:
> >> On Feb 3, 9:45 am, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
> >> > En Tue, 03 Feb 2009 05:31:24 -0200, Brandon Taylor  
> >> > <btaylordes... at gmail.com> escribió:
> >> > > zip_file.extract(zip_name + '/' + thumbnail_image, thumbnail_path)
> >> > > What is happening is that the extract method is creating a folder >  
> >> > with
> >> > > the name of 'zip_name' and extracting the files to it. Example:
> >> > extract will create all directories in member name. Use open instead:
> >> > with zip_file.open(zip_name + '/' + thumbnail_image) as source:
> >> >    with open(os.path.join(thumbnail_path, thumbnail_image), "wb") as  
> >> > target:
> >> >      shutil.copyfileobj(source, target)
> > Ok, the first thing I needed to do was add:
>
> > from __future__ import with_statement at the beginning of my file
>
> That should not be necesary with your Python version (2.6.1 isn't it?)
>
> > with zip_file.open(zip_name + '/' + thumbnail_image) as source:
> >                     with open(os.path.join(thumbnail_path,
> > thumbnail_image), 'wb') as target:
> >                         shutil.copyfileobj(source, target)
>
> > Returns an error on the first line:
>
> > ZipExtFile instance has no attribute '__exit__'
>
> Ouch, sorry, this new feature will appear in the not-yet-released 2.7  
> version...
> Try this instead:
>
> source = zip_file.open(zip_name + '/' + thumbnail_image)
> try:
>    with open(os.path.join(thumbnail_path, thumbnail_image), 'wb') as target:
>      shutil.copyfileobj(source, target)
> finally:
>    source.close()
>
> --
> Gabriel Genellina

Awesome. Works perfectly, and saves me the extra step of having to
move the files.

Many, many thanks!

Kind regards,
Brandon



More information about the Python-list mailing list