Extracting file from zip archive in Python 2.6.1

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Wed Feb 4 01:16:06 EST 2009


En Wed, 04 Feb 2009 00:36:40 -0200, Brandon Taylor  
<btaylordesign 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




More information about the Python-list mailing list