Pythonを使用してzipファイルを圧縮および解凍するチュートリアル

1913 ワード

pythonのzipfileはzipファイルを圧縮および解凍するのに非常に便利な方法を提供します.
たとえば、pyスクリプトがあるディレクトリには、次のファイルがあります.

   readability/readability.js 
  
readability/readability.txt
readability/readability-print.css
readability/sprite-readability.png
readability/readability.css

readabilityディレクトリのファイルをスクリプトが存在するディレクトリのreadability.zipファイルに圧縮し、同じファイル構造を維持し、生成した圧縮パッケージのファイルリストを印刷し、スクリプトが存在するディレクトリのoutputディレクトリとoutput/bakディレクトリにそれぞれファイルを解凍します.
スクリプトは次のとおりです.

#!/usr/vin/env python
# coding: utf-8
"""
     zip  
"""

import os
import zipfile

def compress(zip_file, input_dir):
  f_zip = zipfile.ZipFile(zip_file, 'w')
  for root, dirs, files in os.walk(input_dir):
    for f in files:
      #         ,              
      abs_path = os.path.join(os.path.join(root, f))
      rel_path = os.path.relpath(abs_path, os.path.dirname(input_dir))
      f_zip.write(abs_path, rel_path, zipfile.ZIP_STORED)

def extract(zip_file, output_dir):
  f_zip = zipfile.ZipFile(zip_file, 'r')

  #            
  f_zip.extractall(output_dir)

  #            
  for f in f_zip.namelist():
    f_zip.extract(f, os.path.join(output_dir, 'bak'))

def printdir(zip_file):
  f_zip = zipfile.ZipFile(zip_file, 'r')
  print '== printdir() ============================'
  f_zip.printdir()
  print
  print '== namelist() ============================'
  for f in f_zip.namelist():
    print f

if __name__ == '__main__':
  zip_file = 'readability.zip'
  compress(zip_file, os.path.join(os.getcwd(), 'readability'))
  printdirzip_file)
  extract(zip_file, 'output')