Unzipping a .zip properly, and from a remote URL
M.-A. Lemburg
mal at egenix.com
Wed Feb 4 16:43:04 EST 2009
On 2009-02-03 15:32, Tino Wildenhain wrote:
> Christopher Culver wrote:
>> Tino Wildenhain <tino at wildenhain.de> writes:
>>> so instead you would use archive = zipfile.ZipFile(remotedata)
>>
>> That produces the following error if I try that in the Python
>> interpreter (URL edited for privacy):
>>
>>>>> import zipfile
>>>>> import urllib2
>>>>> remotedata = urllib2.urlopen("http://...file.zip")
>>>>> archive = zipfile.ZipFile(remotedata)
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> File "/usr/lib/python2.5/zipfile.py", line 346, in __init__
>> self._GetContents()
>> File "/usr/lib/python2.5/zipfile.py", line 366, in _GetContents
>> self._RealGetContents()
>> File "/usr/lib/python2.5/zipfile.py", line 376, in _RealGetContents
>> endrec = _EndRecData(fp)
>> File "/usr/lib/python2.5/zipfile.py", line 133, in _EndRecData
>> fpin.seek(-22, 2) # Assume no archive comment.
>> AttributeError: addinfourl instance has no attribute 'seek'
Try this:
>>> import urllib, zipfile, cStringIO
>>> zipwebfile = urllib.urlopen('http://downloads.egenix.com/python/locale-0.1.zip')
>>> buffer = cStringIO.StringIO(zipwebfile.read())
>>> zfile = zipfile.ZipFile(buffer)
>>> zfile.printdir()
File Name Modified Size
locale/Makefile.pre.in 1997-10-31 21:13:06 9818
locale/Setup.in 1997-10-31 21:14:04 74
locale/locale.c 1997-11-19 17:36:46 4698
locale/CommandLine.py 1997-11-19 15:50:02 2306
locale/probe.py 1997-11-19 15:51:18 1870
locale/__init__.py 1997-11-19 17:55:02 0
The trick is to use a StringIO buffer to provide the .seek()
method.
--
Marc-Andre Lemburg
eGenix.com
Professional Python Services directly from the Source (#1, Feb 04 2009)
>>> Python/Zope Consulting and Support ... http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
________________________________________________________________________
::: Try our new mxODBC.Connect Python Database Interface for free ! ::::
eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48
D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
Registered at Amtsgericht Duesseldorf: HRB 46611
http://www.egenix.com/company/contact/
More information about the Python-list
mailing list