使用Python压缩和解压缩zip文件的教程


Posted in Python onMay 06, 2015

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')</pre>

Python 相关文章推荐
在Python中使用NLTK库实现对词干的提取的教程
Apr 08 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
Python环境下安装使用异步任务队列包Celery的基础教程
May 07 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
解决python删除文件的权限错误问题
Apr 24 Python
Python进阶之@property动态属性的实现
Apr 01 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
python运算符之与用户交互
Apr 13 Python
Python发送以整个文件夹的内容为附件的邮件的教程
May 06 #Python
在Linux中通过Python脚本访问mdb数据库的方法
May 06 #Python
python中黄金分割法实现方法
May 06 #Python
使用rpclib进行Python网络编程时的注释问题
May 06 #Python
pymongo给mongodb创建索引的简单实现方法
May 06 #Python
Python中用PIL库批量给图片加上序号的教程
May 06 #Python
python写入中英文字符串到文件的方法
May 06 #Python
You might like
编写PHP的安全策略
2006/10/09 PHP
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
Node.js模块加载详解
2014/08/16 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
python模拟事件触发机制详解
2018/01/19 Python
Python类装饰器实现方法详解
2018/12/21 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
Python如何调用JS文件中的函数
2019/08/16 Python
Python Celery多队列配置代码实例
2019/11/22 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python