zipfile decompress problems


W

Waguy

Hi all,

I am new to python and want to create a process to unzip large numbers of
zip files I get from a SOAP application. The files all have a ZIP extention
and can be unzipped using WinZip.

However when I try opening the files using zlib or zipfile modules I get the
following error:

Traceback (most recent call last):
File "<pyshell#88>", line 1, in -toplevel-
file = zipfile.ZipFile("c:\\chessy.zip", "r")
File "C:\Python24\lib\zipfile.py", line 210, in __init__
self._GetContents()
File "C:\Python24\lib\zipfile.py", line 230, in _GetContents
self._RealGetContents()
File "C:\Python24\lib\zipfile.py", line 242, in _RealGetContents
raise BadZipfile, "File is not a zip file"
BadZipfile: File is not a zip file

The code I used in python was:

import zipfile
file = zipfile.ZipFile("c:\\chessy.zip", "r")

I tried to do the same with a zip file I created using WinZip and it worked
fine. I have been searching the web for about two days and haven't found
anything helpful.

Can anyone help with this? I have the zip I can send, however I tried to
send this message with it attached and it didn't get posted.

Cheers,
 
Ad

Advertisements

G

Giovanni Bajo

Waguy said:
I tried that to and it didn't work, got the same message
Thanks though,


Can you send / provide a link to a minimal zip file which reproduces the
problem?
 
C

Carl Banks

Waguy said:
Hi all,

I am new to python and want to create a process to unzip large numbers of
zip files I get from a SOAP application. The files all have a ZIP extention
and can be unzipped using WinZip.

However when I try opening the files using zlib or zipfile modules I get the
following error:

Traceback (most recent call last):
File "<pyshell#88>", line 1, in -toplevel-
file = zipfile.ZipFile("c:\\chessy.zip", "r")
File "C:\Python24\lib\zipfile.py", line 210, in __init__
self._GetContents()
File "C:\Python24\lib\zipfile.py", line 230, in _GetContents
self._RealGetContents()
File "C:\Python24\lib\zipfile.py", line 242, in _RealGetContents
raise BadZipfile, "File is not a zip file"
BadZipfile: File is not a zip file

The code I used in python was:

import zipfile
file = zipfile.ZipFile("c:\\chessy.zip", "r")

I tried to do the same with a zip file I created using WinZip and it worked
fine. I have been searching the web for about two days and haven't found
anything helpful.

Can anyone help with this? I have the zip I can send, however I tried to
send this message with it attached and it didn't get posted.

Cheers,

I'm guessing the downloaded zip files have a faulty magic number or an
odd value that trips up the zipfile module but that winzip ignores.

Another possibility is this: From the documentation:

"This module does not currently handle ZIP files which have appended
comments, or multi-disk ZIP files."

One thing I've noticed is that, when downloading zip files from a
service of some sort, they often seem to have appended comments.
("This file downloaded from www.extremezipfiles.com, blah blah blah.")

Carl Banks
 
Ad

Advertisements

S

Scott David Daniels

Carl said:
Another possibility is this: From the documentation:
"This module does not currently handle ZIP files which have appended
comments, or multi-disk ZIP files."

One thing I've noticed is that, when downloading zip files from a
service of some sort, they often seem to have appended comments.
("This file downloaded from www.extremezipfiles.com, blah blah blah.")

Based on the file Waguy originally sent, you could try using this:

import zipfile, cStringIO
def getzip(filename, ignoreable=100):
try:
return zipfile.ZipFile(filename)
except zipfile.BadZipfile:
original = open(filename, 'rb')
try:
data = original.read()
finally:
original.close()
position = data.rindex(zipfile.stringEndArchive,
-(22 + ignoreable), -20)
coredata = cStringIO.StringIO(data[: 22 + position])
return zipfile.ZipFile(coredata)

--Scott David Daniels
(e-mail address removed)
 
Ad

Advertisements


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top