]> git.phdru.name Git - dotfiles.git/commitdiff
unzip.py: optimization
authorOleg Broytman <phd@phdru.name>
Sun, 5 Jun 2016 13:44:14 +0000 (16:44 +0300)
committerOleg Broytman <phd@phdru.name>
Sun, 5 Jun 2016 13:44:14 +0000 (16:44 +0300)
Use shutil.copyfileobj() to copy big files by small chunks.

bin/unzip.py

index 6eb4832dc91efa9ef35dcc1786d663ce958602f4..a5d3cf35e20ab4f41d670fd4965233388d388897 100755 (executable)
@@ -6,6 +6,7 @@
 
 import sys, os, time
 from getopt import getopt, GetoptError
+from shutil import copyfileobj
 from zipfile import ZipFile
 from m_lib.defenc import default_encoding
 
@@ -13,11 +14,11 @@ def usage():
     sys.exit('Usage: %s file.zip' % sys.argv[0])
 
 try:
-  options, arguments = getopt(sys.argv[1:], '')
+    options, arguments = getopt(sys.argv[1:], '')
 except GetoptError:
     usage()
 
-if len(arguments) <> 1:
+if len(arguments) != 1:
     usage()
 
 zf = ZipFile(arguments[0], 'r')
@@ -40,9 +41,11 @@ for zinfo in zf.infolist():
         os.makedirs(tgtdir)
 
     if not tgt.endswith('/'):
+        infile = zf.open(zinfo.filename)
         fp = open(tgt, 'wb')
-        fp.write(zf.read(zinfo.filename))
+        copyfileobj(infile, fp)
         fp.close()
+        infile.close()
     dt = time.mktime(zinfo.date_time + (0, 0, -1))
     os.utime(tgt, (dt, dt))
 zf.close()