home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 May / maximum-cd-2010-05.iso / DiscContents / boxee-0.9.20.10711.exe / scripts / OpenSubtitles / resources / lib / unzip.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-12-06  |  5.1 KB  |  165 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. """ unzip.py
  5.     Version: 1.1
  6.  
  7.     Extract a zipfile to the directory provided
  8.     It first creates the directory structure to house the files
  9.     then it extracts the files to it.
  10.  
  11.     Sample usage:
  12.     command line
  13.     unzip.py -p 10 -z c:\testfile.zip -o c:\testoutput
  14.  
  15.     python class
  16.     import unzip
  17.     un = unzip.unzip()
  18.     un.extract(r'c:\testfile.zip', 'c:\testoutput')
  19.     
  20.  
  21.     By Doug Tolton
  22. """
  23. import sys
  24. import zipfile
  25. import os
  26. import os.path as os
  27. import getopt
  28.  
  29. class unzip:
  30.     
  31.     def __init__(self, verbose = False, percent = 10):
  32.         self.verbose = verbose
  33.         self.percent = percent
  34.  
  35.     
  36.     def extract(self, file, dir):
  37.         if not dir.endswith(':') and not os.path.exists(dir):
  38.             os.mkdir(dir)
  39.         
  40.         zf = zipfile.ZipFile(file)
  41.         self._createstructure(file, dir)
  42.         num_files = len(zf.namelist())
  43.         percent = self.percent
  44.         divisions = 100 / percent
  45.         perc = int(num_files / divisions)
  46.         for i, name in enumerate(zf.namelist()):
  47.             if self.verbose == True:
  48.                 print 'Extracting %s' % name
  49.             elif perc > 0 and i % perc == 0 and i > 0:
  50.                 complete = int(i / perc) * percent
  51.                 print '%s%% complete' % complete
  52.             
  53.             if not name.endswith('/'):
  54.                 outfile = open(os.path.join(dir, name), 'wb')
  55.                 outfile.write(zf.read(name))
  56.                 outfile.flush()
  57.                 outfile.close()
  58.                 continue
  59.         
  60.  
  61.     
  62.     def get_file_list(self, zip_file):
  63.         zf = zipfile.ZipFile(zip_file)
  64.         return zf.namelist()
  65.  
  66.     
  67.     def extract_file(self, zip_file, file, dest_file, dir):
  68.         if not dir.endswith(':') and not os.path.exists(dir):
  69.             os.mkdir(dir)
  70.         
  71.         zf = zipfile.ZipFile(zip_file)
  72.         for i, name in enumerate(zf.namelist()):
  73.             if not name.endswith('/'):
  74.                 if name == file:
  75.                     outfile = open(os.path.join(dir, dest_file), 'wb')
  76.                     outfile.write(zf.read(name))
  77.                     outfile.flush()
  78.                     outfile.close()
  79.                 
  80.             name == file
  81.         
  82.  
  83.     
  84.     def _createstructure(self, file, dir):
  85.         self._makedirs(self._listdirs(file), dir)
  86.  
  87.     
  88.     def _makedirs(self, directories, basedir):
  89.         """ Create any directories that don't currently exist """
  90.         for dir in directories:
  91.             curdir = os.path.join(basedir, dir)
  92.             if not os.path.exists(curdir):
  93.                 os.mkdir(curdir)
  94.                 continue
  95.         
  96.  
  97.     
  98.     def _listdirs(self, file):
  99.         ''' Grabs all the directories in the zip structure
  100.         This is necessary to create the structure before trying
  101.         to extract the file to it. '''
  102.         zf = zipfile.ZipFile(file)
  103.         dirs = []
  104.         for name in zf.namelist():
  105.             if name.endswith('/'):
  106.                 dirs.append(name)
  107.                 continue
  108.         
  109.         dirs.sort()
  110.         return dirs
  111.  
  112.  
  113.  
  114. def usage():
  115.     print 'usage: unzip.py -z <zipfile> -o <targetdir>\n    <zipfile> is the source zipfile to extract\n    <targetdir> is the target destination\n\n    -z zipfile to extract\n    -o target location\n    -p sets the percentage notification\n    -v sets the extraction to verbose (overrides -p)\n\n    long options also work:\n    --verbose\n    --percent=10\n    --zipfile=<zipfile>\n    --outdir=<targetdir>'
  116.  
  117.  
  118. def main():
  119.     shortargs = 'vhp:z:o:'
  120.     longargs = [
  121.         'verbose',
  122.         'help',
  123.         'percent=',
  124.         'zipfile=',
  125.         'outdir=']
  126.     unzipper = unzip()
  127.     
  128.     try:
  129.         (opts, args) = getopt.getopt(sys.argv[1:], shortargs, longargs)
  130.     except getopt.GetoptError:
  131.         usage()
  132.         sys.exit(2)
  133.  
  134.     zipsource = ''
  135.     zipdest = ''
  136.     for o, a in opts:
  137.         if o in ('-v', '--verbose'):
  138.             unzipper.verbose = True
  139.         
  140.         if o in ('-p', '--percent'):
  141.             if not unzipper.verbose == True:
  142.                 unzipper.percent = int(a)
  143.             
  144.         
  145.         if o in ('-z', '--zipfile'):
  146.             zipsource = a
  147.         
  148.         if o in ('-o', '--outdir'):
  149.             zipdest = a
  150.         
  151.         if o in ('-h', '--help'):
  152.             usage()
  153.             sys.exit()
  154.             continue
  155.     
  156.     if zipsource == '' or zipdest == '':
  157.         usage()
  158.         sys.exit()
  159.     
  160.     unzipper.extract(zipsource, zipdest)
  161.  
  162. if __name__ == '__main__':
  163.     main()
  164.  
  165.