<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Unzipping shapefiles in Arc 9.3 - Python 2.5 in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/unzipping-shapefiles-in-arc-9-3-python-2-5/m-p/168121#M12982</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
a = [67,111,108]
print "%s%s%s" % (chr(a[0]), (chr(a[1])*2), chr(a[2]))
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 08:45:28 GMT</pubDate>
    <dc:creator>markdenil</dc:creator>
    <dc:date>2021-12-11T08:45:28Z</dc:date>
    <item>
      <title>Unzipping shapefiles in Arc 9.3 - Python 2.5</title>
      <link>https://community.esri.com/t5/python-questions/unzipping-shapefiles-in-arc-9-3-python-2-5/m-p/168119#M12980</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;The method for unzipping files in python 2.5 (Arc9.3) is a bit round-about.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In 2.6 (Arc 10) one gets both an extract() and an extractall() method, either of which which work like a charm...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;HOWEVER, in 2.5 one has to read each file in the zip into a disk file.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;to wit:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;z = r"C:\zipfile.zip" zf = zipfile.ZipFile(z, 'r') nameList = zf.namelist() for n in nameList: &amp;nbsp;&amp;nbsp;&amp;nbsp; print n &amp;nbsp;&amp;nbsp;&amp;nbsp; outFile = open("%s\\%s" % (r"C:", n), 'w') &amp;nbsp;&amp;nbsp;&amp;nbsp; outFile.write(zf.read(n)) &amp;nbsp;&amp;nbsp;&amp;nbsp; outFile.close()&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This extracts most of the shapefile, but the .shp is damaged. ArcCatalog gives it a question mark icon, and it won't open.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The .dbf seems fine (it can be read by itself), and the .prj and .xml are also readable, but the .shp is the wrong size.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;It is, in fact, larger than it would be unzipping with WinZip, and larger than zf.printdir() reports inside the zip. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(about 8,200 bytes larger)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have to support some legacy Arc 9.3 installations for a few more months, so it would be nice to know how I can pry a shapefile out of its zip without rim-wracking it.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 20 Apr 2012 18:22:23 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/unzipping-shapefiles-in-arc-9-3-python-2-5/m-p/168119#M12980</guid>
      <dc:creator>markdenil</dc:creator>
      <dc:date>2012-04-20T18:22:23Z</dc:date>
    </item>
    <item>
      <title>Re: Unzipping shapefiles in Arc 9.3 - Python 2.5</title>
      <link>https://community.esri.com/t5/python-questions/unzipping-shapefiles-in-arc-9-3-python-2-5/m-p/168120#M12981</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;The zipfile module is pure python. Get a copy of &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://svn.python.org/view/*checkout*/python/tags/r267/Lib/zipfile.py" rel="nofollow" target="_blank"&gt;zipfile.py&lt;/A&gt;&lt;SPAN&gt; from python 2.6, rename it and distribute it with your own scripts. E.g. (assuming it is saved as zipfile26.py in the same directory as your code):&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;import zipfile26 z = r"C:\zipfile.zip" zf = zipfile26.ZipFile(z, 'r') zf.extractall(etc...)&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;SPAN&gt;You could also try subclassing ZipFile (2.5) and adding the extract, extractall and _extract_member methods copied from the 2.6 ZipFile class. Completely untested but something like the following *might* work...&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;import zipfile,os,shutil&amp;nbsp; class ZipFile26(zipfile.ZipFile): &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; def extract(self, member, path=None, pwd=None): &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Extract a member from the archive to the current working directory, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using its full name. Its file information is extracted as accurately &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; as possible. `member' may be a filename or a ZipInfo object. You can &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; specify a different directory using `path'. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; """ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not isinstance(member, zipfile.ZipInfo): &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member = self.getinfo(member)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if path is None: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; path = os.getcwd()&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return self._extract_member(member, path, pwd)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; def extractall(self, path=None, members=None, pwd=None): &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Extract all members from the archive to the current working &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; directory. `path' specifies a different directory to extract to. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `members' is optional and must be a subset of the list returned &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by namelist(). &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; """ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if members is None: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; members = self.namelist()&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for zipinfo in members: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.extract(zipinfo, path, pwd)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; def _extract_member(self, member, targetpath, pwd): &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Extract the ZipInfo object 'member' to a physical &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file on the path targetpath. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; """ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # build the destination pathname, replacing &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # forward slashes to platform specific separators. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Strip trailing path separator, unless it represents the root. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (targetpath[-1:] in (os.path.sep, os.path.altsep) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and len(os.path.splitdrive(targetpath)[1]) &amp;gt; 1): &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetpath = targetpath[:-1]&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # don't include leading "/" from file name if present &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if member.filename[0] == '/': &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetpath = os.path.join(targetpath, member.filename[1:]) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetpath = os.path.join(targetpath, member.filename)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetpath = os.path.normpath(targetpath)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create all upper directories if necessary. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; upperdirs = os.path.dirname(targetpath) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if upperdirs and not os.path.exists(upperdirs): &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.makedirs(upperdirs)&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if member.filename[-1] == '/': &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not os.path.isdir(targetpath): &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.mkdir(targetpath) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return targetpath&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source = self.open(member, pwd=pwd) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; target = file(targetpath, "wb") &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; shutil.copyfileobj(source, target) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source.close() &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; target.close()&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return targetpath&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 21 Apr 2012 01:36:26 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/unzipping-shapefiles-in-arc-9-3-python-2-5/m-p/168120#M12981</guid>
      <dc:creator>Luke_Pinner</dc:creator>
      <dc:date>2012-04-21T01:36:26Z</dc:date>
    </item>
    <item>
      <title>Re: Unzipping shapefiles in Arc 9.3 - Python 2.5</title>
      <link>https://community.esri.com/t5/python-questions/unzipping-shapefiles-in-arc-9-3-python-2-5/m-p/168121#M12982</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
a = [67,111,108]
print "%s%s%s" % (chr(a[0]), (chr(a[1])*2), chr(a[2]))
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 08:45:28 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/unzipping-shapefiles-in-arc-9-3-python-2-5/m-p/168121#M12982</guid>
      <dc:creator>markdenil</dc:creator>
      <dc:date>2021-12-11T08:45:28Z</dc:date>
    </item>
    <item>
      <title>Re: Unzipping shapefiles in Arc 9.3 - Python 2.5</title>
      <link>https://community.esri.com/t5/python-questions/unzipping-shapefiles-in-arc-9-3-python-2-5/m-p/168122#M12983</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Haha, thanks.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 23 Apr 2012 12:12:46 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/unzipping-shapefiles-in-arc-9-3-python-2-5/m-p/168122#M12983</guid>
      <dc:creator>Luke_Pinner</dc:creator>
      <dc:date>2012-04-23T12:12:46Z</dc:date>
    </item>
  </channel>
</rss>

